【问题标题】:Write one element of a list in a row at a time一次在一行中写入列表的一个元素
【发布时间】:2020-05-12 15:07:27
【问题描述】:

我有这个列表:

listOflist = [[123, "A", "B", "C"], [456, "D", "E", "F"], [123, "G", "H", "I"]]

我需要将每个列表写入一个 csv 文件。诀窍(至少对我而言)是我需要一次完成一个列表,因此我可以首先检查我正在写入 csv 文件的列表中的一个元素是否已经在另一个列表中。

我首先想到的是这个,但是它给了我一个错误信息(_csv.Error: iterable expected, not int)

for element in list:
    with open("test.csv", "w") as c:
    writer = csv.writer(c)
    writer.writerows(element)

我也试过这个,但它不能正常工作,因为它只将最后一个元素 [123, "G", "H", "I"] 写入文件。

for element in new_list:
    print(element)
    with open("test.csv", "w") as c:
        writer = csv.writer(c)
        writer.writerows(map(lambda x: [x], element))

【问题讨论】:

  • 实际上,你将第一个列表写入文件。之后,您将使用第二个列表覆盖该文件。然后你再次覆盖它,这次是第三个列表......这就是你失去前两个列表的原因。
  • 是的,我没有意识到我处于写作模式。我切换到附加。愚蠢的我。谢谢。
  • 您想将它们写入不同的 CSV 文件吗? (通过附加,您正在写入您打开的唯一 csv 文件)
  • 是的,也是唯一的。附加效果很好。唯一的问题是它将每个元素写在一行上(而不是我希望每个列表都写在一行上)。仍在努力。

标签: python list csv


【解决方案1】:

writerows 已接受列表列表。所以你可以这样做:

with open("test.csv", "w", newline='') as c:
    writer = csv.writer(c)
    writer.writerows(listOfLists)

如果您需要在构建编写器后测试某些东西

with open("test.csv", "w", newline='') as c:
    writer = csv.writer(c)
    for element in listOfLists:
        if isValid(element):     // your code testing if the list can be used
            writer.writerow(element)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多