【问题标题】:writing to .csv file in python not producing expected results在 python 中写入 .csv 文件不会产生预期的结果
【发布时间】:2020-04-16 18:42:59
【问题描述】:

我最近一直在尝试写入 csv 文件,但偶然发现了一个问题。我有一个遍历项目列表的 for 循环,并希望在 .csv 文件中重写此列表,列表中的每个元素都位于新行中。因此,我将代码构造如下。

import csv 

groceries = ["banana", "apple", "orange", "orange", "milk", "orange", 
         "banana"]

file_name = "an_example_file_here"

banana_count = 0
apple_count = 0
orange_count = 0 
milk_count = 0

for i in groceries :
    w = csv.writer(open(file_name + ".csv", "w")) #writing to .csv
    if i == "banana":
        banana_count += 1
        w.writerow(["banana"])
    elif i == "apple":
        apple_count += 1
        w.writerow(["apple"])
    elif i == "orange":
        orange_count += 1
        w.writerow(["orange"])
    elif i == "milk":
        milk_count +=1 
        w.writerow(["milk"])

w.writerow(["banana_count = ", str(banana_count)],)
w.writerow(["apple_count = ", str(apple_count)],)
w.writerow(["orange_count = ", str(orange_count)],)
w.writerow(["milk_count = ", str(milk_count)],)     

我希望得到一个类似于以下内容的 csv 文件: 香蕉,苹果,橙子,橙子,牛奶,橙子,香蕉,banana_count = 2,apple_count = 1,orange_count = 3,milk_count = 1

但是,我得到的实际文件看起来像: 香蕉,banana_count = 2,apple_count = 1,orange_count = 3,milk_count = 1

我不知道为什么,任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: python csv


    【解决方案1】:

    您在每次迭代时都会覆盖您的文件,因为您使用“w”作为 open 函数的参数。尝试使用“a”表示追加到文件而不是“w”表示写入新文件。

    【讨论】:

      【解决方案2】:

      您似乎打开了列表中每个项目的输出文件。写入模式 'w' 会覆盖您为之前的每个项目创建的文件。

      尝试在for循环之前打开文件。

      【讨论】:

        【解决方案3】:

        当你写作时:

        [...]
        for i in groceries :
            w = csv.writer(open(file_name + ".csv", "w")) #writing to .csv
        [...]
        

        您将变量 w 分配给 csv 的 writer 实例的新实例,用于杂货列表中的每个项目。

        因此,每个编写器都从一个空白文件开始,并覆盖上一次迭代中写入的内容。这就是为什么您的文件只获取最后一个元素的 csv 输出的原因;因为它是唯一没有跟随它的迭代会覆盖它的迭代。

        你应该在循环之前初始化 w。

        【讨论】:

          【解决方案4】:

          w = csv.writer(open(file_name + ".csv", "w")) #writing to .csv 中追加的“w”必须设置为“a”

          在 for 循环中也不需要每次都写入文件。把它们留在最后。请注意,它现在还打印 5 行。如果这不是您想要的,请将其放在最后的 1 条语句中

          【讨论】:

            猜你喜欢
            • 2016-05-08
            • 1970-01-01
            • 2015-02-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多