【问题标题】:Writing each sublist in a list of lists to a separate CSV将列表列表中的每个子列表写入单独的 CSV
【发布时间】:2019-07-20 08:52:31
【问题描述】:

我有一个列表列表,每个子列表中包含不同数量的字符串:

tq_list = [['The mysterious diary records the voice.', 'Italy is my favorite country', 'I am happy to take your donation', 'Any amount will be greatly appreciated.'], ['I am counting my calories, yet I really want dessert.', 'Cats are good pets, for they are clean and are not noisy.'], ['We have a lot of rain in June.']]

我想为每个子列表创建一个新的 CSV 文件。到目前为止,我所拥有的只是一种使用以下代码将每个子列表输出为同一 CSV 文件中的一行的方法:

name_list = ["sublist1","sublist2","sublist3"]

with open("{}.csv".format(*name_list), "w", newline="") as f:
    writer = csv.writer(f)
    for row in tq_list:
        writer.writerow(row)

这将创建一个名为“sublist1.csv”的单个 CSV 文件。


我玩弄了以下代码:

name_list = ["sublist1","sublist2","sublist3"]

for row in tq_list:
    with open("{}.csv".format(*name_list), "w", newline="") as f:
        writer = csv.writer(f)
        writer.writerow(row)

它也只输出一个名为“sublist1.csv”的 CSV 文件,但只包含最后一个子列表中的值。我觉得这是朝着正确方向迈出的一步,但显然还没有完全做到。

【问题讨论】:

    标签: python-3.x csv export-to-csv nested-lists sublist


    【解决方案1】:

    您代码中"{}.csv".format(*name_list) 中的* 的实际作用是:它解压缩name_list 中的元素以传递给函数(在本例中为format)。这意味着format(*name_list) 等价于format("sublist1", "sublist2", "sublist3")。由于您的字符串中只有一个{},因此除了"sublist1" 之外的所有格式参数基本上都被丢弃了。

    你可能想做这样的事情:

    for index, row in enumerate(tq_list):
        with open("{}.csv".format(name_list[index]), "w", newline="") as f:
            ...
    

    enumerate 返回一个计数索引以及它迭代的每个元素,以便您可以跟踪已经有多少元素。这样,您每次都可以写入不同的文件。您还可以使用zip,这是另一个方便的函数,您可以在 Python 文档中查找。

    【讨论】:

    • 这成功了@quacodas,你摇滚!单独的问题(随意不回答——你已经完成了你的工作),你知道我如何输出转置的数据,使其成为单列而不是单行吗?
    猜你喜欢
    • 2017-11-20
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2014-05-24
    • 1970-01-01
    • 2019-08-23
    • 2018-06-01
    相关资源
    最近更新 更多