2017-11-20 3 views
0

Ich DictWriter in Python 3 zur Ausgabe von dem Zustand eines Objekts in eine Textdatei, etwa so: inin Python zu jeder Zeile Text hinzufügen Info dictWriter

def to_csv(self): 
    with open('filename', 'w') as myfile: 
     fieldnames = ['a1', 'a2', 'a3', 'a4', 'a5'] 
     wr = csv.DictWriter(myfile, fieldnames=fieldnames) 
     wr.writeheader() 
     for idx, row in enumerate(self.tasks): 
      wr.writerow(row) 

ich jedoch eine zusätzliche Spalte hinzufügen mag die Ausgabe. Hier ist, was ich versuche zu bekommen:

wr.writerow(row + 'task number:'+idx) 

Jeder Pythonic Weg, dies zu tun? Ich denke, ich könnte eine Zeichenfolge mit jeder Zeile vorbereiten, fügen Sie die Task-Nummer an diese Zeichenfolge & dann übergeben Sie diese an den Writerow (mit einem normalen Schreiber anstelle von DictWriter), aber ich möchte nicht mit String & verwenden Sie den DictWriter direkt wenn möglich ...

+0

Warum würde 'wr.writerow (row + {'Aufgabennummer': idx})' nicht funktionieren? Fügen Sie es einfach der Liste der Feldnamen hinzu und Sie sind golden. – cwallenpoole

+0

Aber ich möchte dem Wörterbuch selbst kein Feld hinzufügen, wenn du das meinst? Weil es einfach nicht akzeptiert wird, sie innerhalb von Writerow zu verketten - es gibt keinen + Operator definiert ... selbst wenn Sie eine Diktatzeile mit einer Diktatzeile verketten –

Antwort

1

Wenn ich dies tun würde, würde ich ein neues Diktat erstellen und es in jeder Zeile aktualisieren. Das ist wahrscheinlich einer der klarsten und offensichtlichsten Ansätze.

fieldnames = ['a1', 'a2', 'a3', 'a4', 'a5', 'task number'] 
wr = csv.DictWriter(myfile, fieldnames=fieldnames) 
wr.writeheader() 
for idx, row in enumerate(self.tasks): 
    seed = {'task number': idx} 
    seed.update(row) 
    wr.writerow(seed) 
+0

Das funktioniert - ich habe nicht so viele Anrufe, um das herauszuschreiben und ich bekomme weiter mit dictwriter arbeiten, was die Dinge einfacher macht ... danke. –

Verwandte Themen