【问题标题】:Export a list of lists to CSV file将列表列表导出到 CSV 文件
【发布时间】:2018-10-17 04:21:37
【问题描述】:

所以我有一个有趣的问题阻碍了我。我有一个庞大的列表,其中包含大约 150 个长度为 28 的列表。这些小列表中的每一个看起来都像这样:

['A', '1', 'item', 'item', 'item', 'item', 'item', 'item', '', '', '', '', '', '', '', 'item', 'item', 'item plus text, hi there', 'item and more items', 'item ', 'item', '  item', 'item', 'item ', 'item', 'item', 'item', '']

值得指出的是,这些项目中的每一个都是一个字符串,其中包含 \n 字符、什么都没有、逗号等...每个列表中的前两个项目类似于 A 1、A 2、B 1 等。我的 csv 文件分隔符是 |特点。我遇到的问题是,当我尝试将这些数据写回 csv 文件时,我要么只能将整个列表作为字符串放入每一行的第一列(这意味着它看起来完全像我'已经包括在上面)或将每个项目放在它自己的行上。

理想情况下,我需要完成的是大列表中的每个小列表都在自己的行中,小列表中的每个项目都在该行的自己的单元格中。因此,每一行都会将 A-AB 列用于一个列表。我尝试过的代码类似于:

with open("testFile.csv", "w") as csvfile:
    writer = csv.writer(csvfile, delimiter='|')
    for row in listOfRows: # Uses nested loops to access each item within
        for i in row:      # the small lists.
            writer.writerow([i])

我尝试了一种变体,它写入整个小列表项,但最终将每个小列表放入第一列的一个单元格中。有人对如何解决这个问题有任何想法吗?

【问题讨论】:

    标签: python csv


    【解决方案1】:

    您应该能够使用 csvwriter 类的 writerows 函数一次性完成所有操作,而无需循环。

    with open("testFile.csv", "w") as csvfile:
        writer = csv.writer(csvfile, delimiter='|')
        writer.writerows(listOfRows)
    

    【讨论】:

    • 知道为什么这种方法会在每一行之间放置一个空行吗?这可能是我所拥有的最好的解决方案。
    • 没关系!我使用 lineterminator = '\n' 来修复它。谢谢!
    【解决方案2】:

    Pandas 可以做到这一点,而无需你做任何事情,真的。我将向您展示一个刚刚复制列表的示例,以便您将每个列表放在一行中,利用列 a-ab(我认为这就是您想要的):

    import pandas as pd
    
    a = [['A', '1', 'item', 'item', 'item', 'item', 'item', 'item', '', '', '', '', '', '', '', 'item', 'item', 'item plus text, hi there', 'item and more items', 'item ', 'item', '  item', 'item', 'item ', 'item', 'item', 'item', ''],
    ['A', '1', 'item', 'item', 'item', 'item', 'item', 'item', '', '', '', '', '', '', '', 'item', 'item', 'item plus text, hi there', 'item and more items', 'item ', 'item', '  item', 'item', 'item ', 'item', 'item', 'item', '']]
    
    df = pd.DataFrame(a)
    
    df.to_csv('./Desktop/goofy.csv', index=False, sep='|')
    

    那么你的 csv 文件如下所示:

    空白列对应列表中的''。

    【讨论】:

    • 比我快 5 秒 :P 但你确实忘记了一件事,我建议编辑
    • 熊猫满足一切!我不完全确定是否需要添加它,但在重读问题后,我意识到他是用那个分隔符写出来的,所以谢谢你提出这个建议!
    • 当然。我一直在尝试使用 c# 和一个在我发现 pandas 之前需要使用的不太出色的 API 来管理 excel 报告的数据。真的是至少节省时间,最多节省了一些脑细胞lol
    • 我喜欢这个解决方案,非常简单。不幸的是,我使用的工作计算机很糟糕,我无法在上面安装 pandas - 我宁愿首先使用 pandas 开始这个项目。我现在将坚持使用 csv,因为我已经在这个项目的其他地方使用过它。 Marcus 给了我一个同样有效的解决方案。不过谢谢!
    • 太好了!完全没问题@MikeSassatelli 我只是想我也会提供熊猫解决方案。也许你将来可以使用它。马库斯的回答很棒。
    猜你喜欢
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2019-11-09
    • 2020-01-09
    • 1970-01-01
    • 2018-12-15
    相关资源
    最近更新 更多