2016-05-03 2 views
2

I, wie die Ergebnisse in eine schreiben, um mehrere CSV für Loop-Dateien

with open ('~/abc.csv', 'w') as f: 
    write1 = csv.write(f) 
    write1.writerow(['header1', 'header2', 'header3', 'header4']) 

with open ('~/def.csv', 'w') as g: 
    write2 = csv.write(g) 
    write2.writerow(['header1', 'header2', 'header3', 'header4', 'header5', 'header6']) 

for iteration in a_list: 
    perform calculations 
    result1 = ([h1, h2, h3, h4],[l1, l2, l3, l4],[m1, m2, m3, m4], ...,[]) 
    for pa in result1: 
     write1.writerow(pa) 

    def fun(result1): 
     result2 = ([n1, n2, n3, n4, n5, n6],[p1, p2, p3, p4, p5, p6], [], ...[]) 
     for pb in result2: 
      write2.writerow(pb) 

Erwartet zwei CSV-Dateien als

'header1', 'header2', 'header3', 'header4' 
h1, h2, h3, h4 
l1, l2, l3, l4 
m1, m2, m3, m4 
     : 

und

'header1', 'header2', 'header3', 'header4', 'header5', 'header6' 
n1, n2, n3, n4, n5, n6 
p1, p2, p3, p4, p5, p6 

Dies kann leicht getan werden, wenn haben Alle Iterationen sind abgeschlossen und separate angehängt (Liste) Ergebnis1 und Ergebnis2 können einfach mit writer.writerows (pa) in separate Dateien geschrieben werden. Allerdings möchte ich in jeder Iteration in CSV-Dateien schreiben, so dass ich nicht verpassen würde, wenn ich die Schleife aus irgendeinem Grund brechen muss.

Vielen Dank!

+1

Bitte bearbeiten Sie Ihre Frage und korrigieren Sie die Einrückung des Codes. – Chris

Antwort

1

Sie können zwei Dateien in einem Kontext-Manager platzieren und zwei csv.writer Objekte haben (seit Python 2.7):

with open ('~/abc.csv', 'w') as f, open ('~/def.csv', 'w') as g: 
    writer1 = csv.writer(f) 
    writer2 = csv.writer(g) 

    writer1.writerow(['header1', 'header2', 'header3', 'header4'])  
    writer2.writerow(['header1', 'header2', 'header3', 'header4', 'header5', 'header6']) 

    for iteration in a_list: 
     # perform calculations 
     for pa in result1: 
      writer1.writerow(pa) 
     for pb in result2: 
      writer2.writerow(pb) 

Aus der Dokumentation (die das gleiche für Python 2.7 bis zu 3.5 sind).

Mit mehr als ein Element werden die Kontext-Manager verarbeitet, als ob mehrere mit Anweisungen verschachtelt wurden:

with A() as a, B() as b: 
    suite 

entspricht

with A() as a: 
    with B() as b: 
     suite 

Dies legt nahe, die andere Art, es zu tun, ist, dass die Verschachtelung eine Ebene tiefer geht pro.

with open ('~/abc.csv', 'w') as f: 
    with open ('~/def.csv', 'w') as g: 
     writer1 = csv.writer(f) 
     writer2 = csv.writer(g) 
     ... 
+0

mit open ('~/abc.csv', 'w') als f, offen ('~/def.csv' , 'w') als g: ungültige Syntax – Jagruth

+0

Welche Version von Python verwendest du? Dies funktioniert für mich in Python 2.7. –

+0

Python-Version 3.4.3 – Jagruth

0

Derzeit haben Sie nur eine Schreibvariable deklariert. Sie würden eine zweite Schreibervariable benötigen.

fWriter = csv.write(f) 

... 

gWriter = csv.write(g) 

... 

fWriter.writerow(pa) 

... 

gWriter.writerow(pb) 
+0

Ich habe verschiedene Schreibvariablen definiert. Allerdings habe ich es bei der Konvertierung in den Beispielcode verpasst. – Jagruth

+0

Sie können Ihren Beispielcode bearbeiten, damit die Leute ihre Zeit nicht auf Dinge verschwenden, die nicht das eigentliche Problem sind. –

+1

Entschuldigung. Bearbeitet! – Jagruth

Verwandte Themen