我正在修改一个包含两个字段名的CSV文件,我想在另一个字段名下添加一个字符串到每行的末尾。我已经弄清楚如何添加字段名,但不知道如何添加字段名。看起来它应该很简单,但我很难过。
import csv
with open('test2l.csv', 'r') as inny:
reader = csv.DictReader(inny)
with open('outfile.csv', 'w') as outty:
fieldnames = ["Genus", "Species", "Source"]
writer = csv.DictWriter(outty, fieldnames = fieldnames)
writer.writeheader()
for record in reader:
g = record['Genus']
s = record['Species']
我尝试的所有内容都将字符串添加到'Species'中的现有字符串中,但我无法为'Source'创建记录,我认为因为它是空的。
谢谢!
答案 0 :(得分:1)
如果您还没有,请查看csv.Reader,csv.DictReader和csv.DictWriter的文档。
文档指出reader对象使用迭代器协议对on对象进行操作。迭代一次(对于读者中的行:例如)添加“Source”会耗尽底层迭代器。之后尝试将同一个阅读器与作者一起使用是行不通的。
要解决此问题,您可以创建一个列表:
rows = list(csv.DictReader(inny))
虽然这会耗尽迭代器,但您现在有了一个可以使用的列表。但是,如果列表很长,这可能不太理想。
另一个解决方案是添加Source并在同一次迭代中写入行:
for row in reader:
row['Source'] = 'same string every time'
writer.writerow(row)
答案 1 :(得分:0)
简单地写一下:
for record in reader:
record["Source"] = "whateversource"
在您写入文件的步骤之前这样做。