2017-04-26 10 views
0

CSV 파일을 출력하려고하는데 헤더가 사라지고 문제가 무엇인지 잘 모릅니다. 내 코드는 ...CSV 출력 파일 (파이썬)에서 헤더가 누락되었습니다.

내 샘플 데이터는 다음과 같습니다 (그래서 또한 그것을 제거하는 방법에 코드를 추가 거기에 여러 개의 데이터가있는 가정) ABC.csv

KeyID,GeneralID 
145258,KL456 
145259,BG486 
145260,HJ789 
145261,KL456 
145259,BG486 
145259,BG486 

내 코드 :

import csv 
import fileinput 
from collections import Counter 

file_path_1 = "ABC.csv" 

key_id = [] 
general_id = [] 
total_general_id = [] 

with open(file_path_1, 'rU') as f: 
    reader = csv.reader(f) 
    header = next(reader) 
    lines = [line for line in reader] 
    counts = Counter([l[1] for l in lines]) 


new_lines = [l + [str(counts[l[1])] for l in lines] 
with open(file_path_1, 'wb') as f: 
    writer = csv.writer(f) 
    writer.writerow(header + ['Total_GeneralID']) 
    writer.writerows(new_lines) 

with open(file_path_1, 'rU') as f: 
    reader = csv.DictReader(f) 
    for row in reader: 
     key_id.append(row['KeyID']) 
     general_id.append(row['GeneralID']) 
     total_general_id.append(['Total_GeneralID']) 

New_List = [[] for _ in range(len(key_id))] 
for attr in range(len(key_id)): 
    New_List[attr].append(key_id[attr]) 
    New_List[attr].append(general_id[attr]) 
    New_List[attr].append(total_general_id[attr]) 

with open('result_id_with_total.csv', 'wb+') as newfile: 
    header = ['KEY ID', 'GENERAL ID' , 'TOTAL GENERAL ID'] 
    wr = csv.writer(newfile, delimiter=',', quoting = csv.QUOTE_MINIMAL) 
    wr.writerow(header) #I already add the headers but it won't work. 
    for item in New_List: 
     if item not in newfile: 
      wr.writerow(item) 

U 불행히도, 내 출력은 다음과 같을 것입니다 (result_id_with_total.csv);

145258,KL456,2 
145259,BG486,1 
145260,HJ789,1 
145261,KL456,2 

달성하려는 목표; 이 코드에서

KEY ID,GENERAL ID,TOTAL GENERAL ID 
145258,KL456,2 
145259,BG486,1 
145260,HJ789,1 
145261,KL456,2 

내 주요 문제 :

wr.writerow(header) 

이 작동하지 않습니다.

+0

다음과 같이해야합니다 :'new_lines = [l + [str (counts [l [1]]) for l]'무엇이 잘못 되었습니까? 그것은 나를 위해 달린다. –

+0

@StephenRauch 코드가 잘 작동했는데, 이것은 또 다른 문제입니다. 내 문제를 마지막으로 해결 했으므로 잘못된 정보를 볼 수 있기를 바랍니다. 이 코드의 출력 결과는 헤더가없는 데이터입니다. – yunaranyancat

+0

'newfile에없는 항목 :'하려고하는 것은 무엇입니까? –

답변

0

wb+ (바이트 쓰기)으로 파일을 여는 것과 관련이 있습니다. 바이트 모드로 파일을 쓸 때 문자열이 아닌 바이트 배열을 전달해야하기 때문에. 나는 그것을 실행할 때

내가 콘솔에서이 오류가 발생합니다 :

TypeError: a bytes-like object is required, not 'str' 

봅니다 wb+ 단지 w을 변경,이 트릭을 수행합니다.

with open('result_id_with_total.csv', 'w') as newfile: 
    header = ['KEY ID', 'GENERAL ID' , 'TOTAL GENERAL ID'] 
    wr = csv.writer(newfile, delimiter=',', quoting = csv.QUOTE_MINIMAL) 
+0

w + 대신 w를 사용하려고하면 'IOError : 읽기 위해 열 수없는 파일'이라는 오류가 표시되지만 w +를 사용하면 초기 문제 인 데이터로 돌아가지만 csv 출력에는 헤더가 없습니다. – yunaranyancat