2017-04-08 136 views
1

如何在通过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仍然读取旧的未经编辑的文件。

我该如何解决这个问题?

+1

为什么不使用原始分隔符?请注意,'line ='只是在循环中重新分配该名称,它不会**更改底层文件。 – jonrsharpe

+0

[使用Python进行内联CSV文件编辑]的可能重复(http://stackoverflow.com/questions/16020858/inline-csv-file-editing-with-python) – wwii

回答

1

您可以构建一个生成器以允许即时编辑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']