2017-05-01 4 views
0

Ich versuche, von einem zu lesen und zu zweiten CSV-Dateien zu schreiben. Das Problem ist, dass ich wissen muss, wie viele Zeilen in der CSV-Eingabedatei vor dem Lesen vorhanden sind.Python CSV-Reader überspringt nicht die erste Zeile

with open('csv/file.csv') as f: 
    with open('output/output_{}.csv'.format(time.strftime("%Y%m%d-%H%M%S")), 'wb') as o: 
     reader = csv.DictReader(f) 
     reader.fieldnames.append('VAT added') 
     rows = sum(1 for _ in reader) 
     f.seek(0) 
     writer = csv.DictWriter(o, fieldnames=reader.fieldnames) 
     writer.writeheader() 
     for n,line in enumerate(reader): 
      print line 
      print '{} lines remaining'.format(rows-n) 
      code = line['number'].strip() 
      ... 
      writer.writerow(line) 

Das Problem ist, dass es die header Zeile liest, so dass es Fehler nach der ersten Iteration zurückgibt. Wo ist das Problem?

+0

Können Sie nach genau den Fehler, die Sie bekommen? Sie können die erste Iteration einfach überspringen. – mknull

+0

Was ist, wenn Sie 'für n, Zeile in Enumerate (Leser): wenn n> 0: '? – blacksite

+0

pandas ''read_csv'-Funktion hat einen' skiprows'- und 'header'-Parameter, von denen Ihnen beide hier helfen können. http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html –

Antwort

0

Question ... it returns error after first iteration

Haben Sie nicht wissen, welche Fehler man bekommt, aber ich Typeerror: ‚str‘ unterstützt nicht die Puffer-Schnittstelle.

Der Grund ist folgende Codezeile:

with open('output/output_{}.csv'.format(time.strftime("%Y%m%d-%H%M%S")), 'wb') as o: 

öffnen Sie nicht eine csv Datei im Binärmodus wb, zu w ändern, z.

with open('output/output_{}.csv'.format(time.strftime("%Y%m%d-%H%M%S")), 'w') as o: 

mit Python getestet: 3.4.2

Verwandte Themen