澄清: 所以,如果我的文件有10行: 第一行是标题,所以我想在第一行末尾添加一些文本
我有一个包含9个元素的列表..
我想读取该列表,并在每行的末尾添加相应的元素..
所以基本上将[0]列表到第二行,列出[1]到第三行,依此类推......
我有一个用逗号分隔的文件。 像这样的东西:
A,B,C
0.123,222,942
......
现在我想做这样的事情:
A,B,C,D #append "D" just once
0.123,222,942,99293
............
这个“D”实际上保存在列表中所以是的,我有这个“D” 我该怎么做呢?我的意思是我知道天真的方式。 喜欢通过每一行,并做类似
的事情string += str(list[i])
基本上我如何以pythonic方式在文件的末尾添加一些内容:)
答案 0 :(得分:4)
只需创建一个新文件:
data = ['header', 1, 2, 3, 4]
with open("infile", 'r') as inf, open("infile.2", 'w') as outf:
outf.writelines('%s,%s\n' % (s.strip(), n) for s, n in zip(inf, data))
如果您想“更新”输入文件,请稍后重命名新文件
import os
os.unlink("infile")
os.rename("infile.2", "infile")
答案 1 :(得分:2)
简答:使用the csv
module。
答案很长:
import csv
newvalues = [...]
with open("path/to/input.csv") as file:
data = list(csv.reader(file))
with open("path/to/input.csv", "w") as file:
writer = csv.writer(file)
for row, newvalue in zip(data, newvalues):
row.append(newvalue)
writer.writerow(row)
当然,这取决于文件中的行,而newvalues
的长度相同。如果不是这种情况,您可以使用类似zip_longest
的内容来填充具有给定值的多余行。
如果您对不同的文件执行此操作,我们可以更轻松地执行此操作:
import csv
newvalues = [...]
with open("path/to/input.csv") as from, open("path/to/output.csv", "w") as to:
reader = csv.reader(from)
writer = csv.writer(to)
for row, newvalue in zip(reader, newvalues):
row.append(newvalue)
writer.writerow(row)
这样做的好处是不会将整个文件读入内存,因此对于非常大的文件,这是一个更好的解决方案。