编辑一个打开的csv文件
问题描述:
如何在通过csv阅读器运行之前编辑一个打开的csv文件的内容?编辑一个打开的csv文件
csvfile = open(input, mode='r', newline='', encoding='utf-8') # opening csv file
for line in csvfile:
line = line.replace(",", ";") #replacing comma with semicolon
print(line) # test if replace was successful (working)
csvfile.seek(0) # return to the beginning of the file
csv_read = csv.reader(csvfile, delimiter=";", quotechar='"') # use reader
这不工作,因为我希望和csv.reader仍然读取旧的未经编辑的文件。
我该如何解决这个问题?
答
您可以构建一个生成器以允许即时编辑csv
文件。这实际上并不编辑文件,它只是修改读者看到的内容。
代码:
def edit_csv_on_fly(csv_file):
for line in csv_file.readlines():
# replacing comma with semicolon
yield line.replace(",", ";")
测试代码:
import csv
with open('myfile.csv', 'rU') as csvfile:
csv_read = csv.reader(
edit_csv_on_fly(csvfile), delimiter=";", quotechar='"')
for row in csv_read:
print(row)
测试数据:
"COLUMN A","COLUMN B","COLUMN C","COLUMN D","COLUMN E"
"COLUMN A","COLUMN B","COLUMN C","COLUMN D","COLUMN E"
"COLUMN A","COLUMN B","COLUMN C","COLUMN D";"COLUMN E"
结果:
['COLUMN A', 'COLUMN B', 'COLUMN C', 'COLUMN D', 'COLUMN E']
['COLUMN A', 'COLUMN B', 'COLUMN C', 'COLUMN D', 'COLUMN E']
['COLUMN A', 'COLUMN B', 'COLUMN C', 'COLUMN D', 'COLUMN E']
为什么不使用原始分隔符?请注意,'line ='只是在循环中重新分配该名称,它不会**更改底层文件。 – jonrsharpe
[使用Python进行内联CSV文件编辑]的可能重复(http://*.com/questions/16020858/inline-csv-file-editing-with-python) – wwii