2010-03-02 10 views
89

Ich versuche, eine neue Zeile in meine alte CSV-Datei hinzuzufügen. Grundsätzlich wird es jedes Mal aktualisiert, wenn ich das Python-Skript ausführe.neue Zeile an alte csv-Datei anhängen python

Im Moment bin Speicherung ich die alten csv Zeilen Werte in einer Liste und dann die CSV-Datei zu löschen und erneut mit dem neuen Listenwert zu schaffen.

Wollte wissen, gibt es bessere Möglichkeiten, dies zu tun.

Antwort

118
fd = open('document.csv','a') 
fd.write(myCsvRow) 
fd.close() 

eine Datei mit dem 'a' Parameter öffnen, können Sie bis zum Ende der Datei, anstatt einfach zu überschreiben den vorhandenen Inhalt anzuhängen. Versuch das.

+1

Ich versuchte fp = open (csv_filepathwithname, 'wa') writer = csv.writer (fp) somelist = [3,56,3,6,56] writer.writerow ((somelist)) aber nur die letzte Zeile wird in der Datei angehängt. – laspal

8

Öffnen Sie die Datei mit dem Modus 'a' anstelle von 'w'?

Siehe Reading and Writing Files in dem Python-docs

7,2. Lesen und Schreiben von Dateien

open() gibt ein Dateiobjekt zurück und wird am häufigsten mit zwei Argumenten verwendet: open (Dateiname, Modus).

>>> f = open('workfile', 'w') 
>>> print f <open file 'workfile', mode 'w' at 80a0960> 

Das erste Argument ist eine Zeichenfolge, die den Dateinamen enthält. Das zweite Argument ist ein weiterer String mit ein paar Zeichen beschreibt die Art und Weise, in der die Datei verwendet wird. Modus kann 'r' sein, wenn die Datei nur lesen, 'w' nur für das Schreiben (eine vorhandene Datei mit dem gleichen Namen wird gelöscht werden), und 'a' öffnet die Datei zum Anhängen; alle Daten, die an geschrieben werden, wird die Datei automatisch am Ende hinzugefügt. 'r +' öffnet die Datei für Lesen und Schreiben. Das Modusargument ist optional. 'r' wird angenommen, wenn es weggelassen wird.

Unter Windows, 'b' an den Modus angehängt öffnet die Datei im Binärmodus, so gibt es auch Modi wie 'rb', 'wb' und 'r + b'. Python unter Windows unterscheidet zwischen Text- und Binärdateien; Das Ende der Zeile Zeichen in Textdateien werden automatisch geringfügig geändert, wenn Daten gelesen oder geschrieben wird. Diese hinter den Kulissen vorgenommene Änderung der Dateidaten ist für ASCII-Textdateien in Ordnung, aber sie wird Binärdaten wie diese in JPEG- oder EXE-Dateien beschädigen. Seien Sie sehr vorsichtig beim Lesen von Binär-Modus und Schreiben solcher Dateien. Unter Unix tut es nicht weh, einen 'b' an den Modus anzuhängen, so dass Sie es plattformunabhängig für alle binären Dateien verwenden können.

+0

vielleicht könnten Sie Ihre Antwort ausführlicher machen, dann würde es wie eine echte Antwort aussehen :-) – user702846

+0

@user, habe ich einen Link hinzugefügt - hilft Ihnen das? –

59

Ich bevorzuge diese Lösung die csv Modul aus der Standardbibliothek und die with Anweisung offen zu lassen, die Datei zu vermeiden.

Der entscheidende Punkt ist 'a' mit zum Anhängen, wenn Sie die Datei öffnen.

import csv 
fields=['first','second','third'] 
with open(r'name', 'a') as f: 
    writer = csv.writer(f) 
    writer.writerow(fields) 

Sie können überflüssige neue Linien in Windows erleben. Sie können versuchen, sie zu vermeiden, indem Sie 'ab' anstelle von 'a' verwenden.