2017-04-08 151 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']