我正在尝试遍历python中的现有csv文件,并在每行的末尾附加(不同的)值。
读取文件行的代码
out_file = open(outputfile, 'r+')
out_reader = csv.reader(out_file)
out_lines = [row for row in out_reader]
附加新值的代码
out_lines[i] = out_lines[i][0] + "\t %r " % lstName[0]
问题是我在out_lines中获得了所需的值,但不是在原始文件中。将这些结果附加到原始文件的最佳方法是什么,一次一行?
答案 0 :(得分:1)
如果您不想将新数据写入第二个文件,则需要覆盖源。
从您的代码中看来,输入文件似乎只有1列,而列分隔符是制表符。
不清楚附加到每一行的新值来自哪里,所以我假设它存储在一个列表(lstName
)中,该列表至少包含与输入中的行一样多的元素文件:
import csv
lstName = ['a', 'b', 'c', 'd', 'e', 'etc']
with open('file.csv', 'r+') as f:
reader = csv.reader(f, delimiter='\t')
out_lines = [row + [lstName[i]] for i, row in enumerate(reader)]
f.seek(0) # set file position to the beginning of the file
csv.writer(f, delimiter='\t').writerows(out_lines)
首先读取文件并使用附加的新值构建列表。 enumerate()
用于提供lstName
列表的索引。读取文件后,文件将重新定位到文件的开头,然后新数据将写入文件,覆盖原始文件内容。
答案 1 :(得分:0)
您必须回写该文件并附加它:
with open("yourcsvfile", "a") as csvfile:
#your read loop here
csvfile.write(outlines[i])