2017-04-26 2 views
0

Ich versuche, eine CSV-Datei auszugeben, aber das Problem ist, die Header sind weg, und ich habe versucht, meinen Code Zeile für Zeile, aber ich weiß nicht, was los ist mit mein Code ..Fehlende Header in CSV-Ausgabedatei (Python)

Meine Beispieldaten ist: ABC.csv (vorausgesetzt, es gibt mehrere Daten in es so auch ich den Code auf hinzufügen, wie es zu entfernen)

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

Mein Code:

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 Leider wäre meine Ausgabe so (result_id_with_total.csv);

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

Was ich versuche zu erreichen;

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

Mein Hauptproblem in diesem Code:

wr.writerow(header) 

wird nicht funktionieren.

+0

neben dieser Zeile muss sein: 'new_lines = [l + [str (zählt [l [1]])] für l in Zeilen]', was ist los? Es läuft für mich. –

+0

@StephenRauch Dein Code hat gut funktioniert, das ist ein weiteres Problem, seit du mein Problem beim letzten Mal gelöst hast, also informiere ich dich hoffend, dass du vielleicht sehen könntest, was los ist. Die Ausgabe dieses Codes gab mir die Daten ohne Kopfzeilen. – yunaranyancat

+0

Was ist 'if Artikel nicht in newfile:' versucht zu tun? –

Antwort

0

Dies ist mit dem Öffnen einer Datei mit wb+ (schreiben Bytes) zu tun. Wenn Sie eine Datei im Byte-Modus schreiben, müssen Sie ihr ein Array von Bytes und keine Strings übergeben.

ich diesen Fehler in der Konsole, wenn ich es laufen:

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

Versuchen Sie, wb+ nur w, tut dies der Trick.

+0

Wenn ich versuche, w anstelle von w + zu verwenden, gab es mir einen Fehler "IOError: Datei nicht zum Lesen geöffnet", aber wenn ich w + benutze, ging ich zurück zu meinem anfänglichen Problem, Daten, aber keine Header in CSV-Ausgabe. – yunaranyancat

Verwandte Themen