Python - 写入CSV文件和for循环

3
编辑:批准的答案是正确的,我的所有数据都出现在文件中,但由于它循环并将每个信息写入新行,因此数据无组织且呈级联模式。目前只是一个格式问题。有人遇到过类似的问题吗?
我有一个for循环,在其中定义了多个变量。我需要将这些变量中的值打印到CSV中,而不会一遍又一遍地覆盖行。我知道解决方法涉及将“with open”语句放在for循环之外,但是然后python就不再识别我的变量了。
我认为解决方案的另一部分是在变量内附加数据,以便您可以在for循环之外调用它,但我不确定如何针对我的情况做到这一点。
示例:
for item in my_list:

    info  = inspect.getmembers(item)
    name = info[0]

import csv

with open("sample.csv", "w") as csvFile:
    fieldnames = ['Item Name']
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'Item Name': name })
csvFile.close()

在这个例子中,变量"name"无法定义,因为它是在for循环内定义的。

如果你使用with,就不需要csvFile.close()。此外,在你的循环中,name总是被重新定义,你是想将所有的info[0]添加到一个列表中吗?另外,你应该使用一个名为list的变量,因为Python已经用它来创建空列表了。最后,with已经在for循环之外了,你得到的输出是什么,你期望得到的又是什么? - jacoblaw
是的,我需要将所有info[0]写入csv文件。例如,如果我打印“name”,然后运行此代码,我可以看到列表中每个项目的名称,但是当我将其写入csv时,我只能看到列表中最后一个项目的名称。 - nikki_c
2个回答

7
import csv
with open("sample.csv", "w") as csvFile:
    fieldnames = ['Item Name']
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames)
    writer.writeheader()

    for item in list:
        info  = inspect.getmembers(item)
        name = info[0]

        writer.writerow({'Item Name': name })

3

在循环前加上with,这样你就可以从循环中将值写入文件:

import csv
with open('sample.csv', 'w') as csvFile:
    fieldnames = ['Item Name']
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames)
    writer.writeheader()

    for item in list:
        # get the data you want from item
        info  = inspect.getmembers(item)
        name = info[0]

        # write the data to the file
        writer.writerow({'Item Name': name })

注意(因为我还没有足够的声望来发表评论):Rohan答案中找到的csvFile.close()是不必要的,因为这已经由with语句处理。此外,根据PEP8,他应该使用2个空格而不是4个缩进。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接