2017-04-08 7 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

[Inline CSV File Editing with Python] 가능한 중복 (http://stackoverflow.com/questions/16020858/inline-csv-file-editing-with-python) – wwii

답변

1

발전기를 빌드하여 csv 파일을 즉시 편집 할 수 있습니다. 이것은 실제로 파일을 편집하지 않고 단순히 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']