2017-11-17 3 views
1

두 개의 필드 이름으로 CSV 파일을 수정하고 추가 fieldname 아래의 각 행 끝에 문자열을 추가하고 싶습니다. 필드 이름을 추가하는 방법을 알아 냈습니다.하지만 필드 이름을 추가하는 방법은 알지 못합니다. 그것은 단순해야만하는 것처럼 보이지만 나는 곤두박질 친다. 비어이기 때문에 시도파이썬 : 각 줄 끝에 동일한 문자열을 추가하십시오.

import csv 

with open('test2l.csv', 'r') as inny: 
    reader = csv.DictReader(inny) 

    with open('outfile.csv', 'w') as outty: 
     fieldnames = ["Genus", "Species", "Source"] 
     writer = csv.DictWriter(outty, fieldnames = fieldnames) 
     writer.writeheader() 

     for record in reader: 
      g = record['Genus'] 
      s = record['Species'] 

모든 것이 '종'의 기존 문자열에 문자열을 추가 만하고 나는 '소스'에 대한 기록을 만들 수 없었다, 나는 가정합니다.

감사합니다.

+4

은'기록 [ "소스"] = "뭔가"'다음'writer.writerow를 사용 (기록을) 할 '문제가 뭐니? –

답변

0

간단하게 쓰기 : csv.Reader에 대한 문서를 확인,

for record in reader: 
    record["Source"] = "whateversource" 

을 그리고 당신이 이미하지 않은 경우 당신이 file.`

1

에 작성하는 단계 전에 그렇게, CSV .DictReader 및 csv.DictWriter.

설명서는 판독기 객체가 반복기 프로토콜을 사용하여 on 객체에서 작동 함을 나타냅니다. "Source"를 추가하기 위해 한 번 반복 (예 : 독자의 행에 대해)하면 기본 반복기가 소모됩니다. 작가와 동일한 리더를 사용하려고하면 나중에 작동하지 않습니다.

당신이 목록을 만들 수 있습니다,이 문제를 해결하려면 다음

rows = list(csv.DictReader(inny)) 

를이 반복자를 배출하는 동안, 당신은 지금 작업 할 목록을 가지고있다. 그러나 목록이 너무 길면 이상적이지 않을 수 있습니다.

또 다른 해결책은 동일한 반복하는 동안 소스를 추가하고 행을 작성하는 것입니다 :

for row in reader: 
    row['Source'] = 'same string every time' 
    writer.writerow(row) 
관련 문제