对于Inline CSV File Editing with Python帖子,我看到了一个较旧的答案,该帖子有关如何修改csv文件并保存它。它使用tempfile模块。我在Python 3.6中使用了相同的代码,但由于在二进制模式下读取文件而无法对其进行迭代,因此出现错误。
下面的代码创建一个简单的CSV文件
import csv
with open('proglanguages.csv', mode='w', newline='') as csv_file:
fieldnames = ['lang', 'value']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writerow({'lang': 'Java', 'value': '90'})
writer.writerow({'lang': 'c', 'value': '80'})
writer.writerow({'lang': 'Perl', 'value': '78'})
writer.writerow({'lang': 'C++', 'value': '92'})
writer.writerow({'lang': 'Python', 'value': '0'})
writer.writerow({'lang': 'Fortran', 'value': '70'})
以下代码修改了先前生成的CSV文件
from tempfile import NamedTemporaryFile
import shutil
import csv
filename = 'proglanguages.csv'
tempfile = NamedTemporaryFile(delete=False)
with open(filename, mode='rb') as csvFile, tempfile:
reader = csv.reader(csvFile, delimiter=',', quotechar='"')
writer = csv.writer(tempfile, delimiter=',', quotechar='"')
for row in reader:
if row[0] == 'Python':
row[1] = '100'
writer.writerow(row)
else:
writer.writerow(row)
shutil.move(tempfile.name, filename)
以哪种方式,我可以使用for循环进行迭代,修改项目并写入临时文件
答案 0 :(得分:2)
您在这里并不幸运。 Martijn Pieters的回答总是高质量的。当您使用Python 3时,这个代码曾经是针对Python 2的。并且csv语义已经发生了变化……您不应再在Python 3中使用二进制模式,而是要对初始的csv文件执行以下操作:
...
tempfile = NamedTemporaryFile(delete=False, newline='', mode='w')
with open(filename, mode='r', newline='') as csvFile, tempfile:
reader = csv.reader(csvFile)
writer = csv.writer(tempfile)
...