2016-06-24 24 views
1

Ich versuche, eine CSV-Datei zu lesen und eine andere zu erstellen. Hier ist der (vereinfachte) Code.Python: Schreiben in CSV-Datei

import os 
import csv 
import sys 

fn = 'C:\mydird\Temp\xyz' 
ext = '.txt' 
infn = fn+ext 
outfn = fn+'o'+ext 


infile = open(infn, newline='') 
outfile = open(outfn, 'w', newline='') 

try: 
    reader = csv.reader(infile, delimiter=',', quotechar='"') # creates the reader object 
    writer = csv.writer(outfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 

    for row in reader: # iterates the rows of the file in orders 
     if reader.line_num == 1 : 
      print("Header") 
      writer.writerow(['Date', 
       'XY'])      # ####### Does not work 
     else: 
#   Do something 
      print(row[0], 
       row[3])      # ####### Works 
      writer.writerow([row[0], 
       row[3]])     # ####### Does not work 
finally: 
    infile.close()  # closing 

sys.exit(0)) 

Keine der writerow-Anweisungen generiert Ausgabe.

Die Datei wird erstellt, ist aber leer.

Die print-Anweisung erstellt 'erwartete' Ausgabe.

Ich habe auch schon csv.DictWriter mit keinem Erfolg versucht.

Ich habe mir die verschiedenen Fragen angeschaut, sehe aber keinen Unterschied.

Ich benutze Py 3.3.3 auf einer Win 7 Maschine.

EDIT:

der Schriftsteller Code Vereinfachung verirrt

+1

Sie definieren nicht 'writer' oder schließen das' outfile' –

Antwort

4

Ihr Code einen Schriftsteller nicht definiert.

Fügen Sie writer = csv.writer(outfile) hinzu und schließen Sie dann das Outfile und es sollte funktionieren. Die Verwendung des with Idioms macht den Code sauberer.

import csv 

fn = 'C:\mydird\Temp\xyz' 
ext = '.txt' 
infn = fn+ext 
outfn = fn+'o'+ext 

with open(infn) as rf, open(outfn, 'w') as wf: 
    reader = csv.reader(rf, delimiter=',', quotechar='"') 
    writer = csv.writer(wf) 
    for row in reader: # iterates the rows of the file in orders 
     if reader.line_num == 1 : 
      print("Header") 
      writer.writerow(['Date', 'XY']) 
     else: 
      # do something 
      print(row[0], row[3]) 
      writer.writerow([row[0], row[3]]) 
+0

Es war der Abschluss. –