Python - 写入 CSV 文件和 for 循环
Posted
技术标签:
【中文标题】Python - 写入 CSV 文件和 for 循环【英文标题】:Python - Writing to CSV files and for loops 【发布时间】:2018-01-12 18:39:36 【问题描述】:编辑批准的答案是正确的,我的所有数据都出现在文件中,但是由于它正在循环并将每条信息写入新行,因此数据是无组织的并出现在级联模式。在这一点上,它只是一个格式问题。有人遇到过类似的问题吗?
我有一个 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
循环之外了,你得到的输出是什么?
是的,我需要将所有 info[0] 写入 csv。假设我要打印“名称”然后运行此代码,我可以看到列表中每个项目的名称,但是当我将其写入 csv 时,我只能看到列表中最后一项的名称。
【参考方案1】:
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 )
【讨论】:
【参考方案2】:将with
放在循环之前,以便您可以从 for 循环中将值写入文件:
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 个用于缩进。
【讨论】:
以上是关于Python - 写入 CSV 文件和 for 循环的主要内容,如果未能解决你的问题,请参考以下文章
如何将 python 中 for 循环的输出写入 csv 格式的文件?
Python - 将 For Loop 项目作为新行写入 CSV