2010-11-10 9 views
5

Ich benutze Python CSV-Modul zum Lesen und Schreiben von CSV-Dateien.Überschreiben einer bestimmten Zeile in einer CSV-Datei mit Python CSV-Modul

Ich habe die Lesung gut und an die CSV-Strafe anfügen, aber ich möchte in der Lage sein, eine bestimmte Zeile in der CSV zu überschreiben.

Als Referenz hier meine Lektüre ist und dann das Schreiben von Code anhängen:

#reading 
    b = open("bottles.csv", "rb") 
    bottles = csv.reader(b) 
    bottle_list = [] 
    bottle_list.extend(bottles) 
    b.close() 

    #appending 
    b=open('bottles.csv','a') 
    writer = csv.writer(b) 
    writer.writerow([bottle,emptyButtonCount,100, img]) 
    b.close() 

Und ich bin mit im Grunde das gleiche für den Überschreibmodus (was nicht korrekt ist, überschreibt nur die gesamte CSV-Datei):

Im zweiten Fall, wie erkläre ich Python muss ich eine bestimmte Zeile überschrieben? Ich habe Gogle und andere Stackoverflow-Posts ohne Erfolg durchforstet. Ich nehme an, mein begrenztes Programmierwissen ist eher schuld als Google.

Antwort

11

werde ich Steven Antwort hinzufügen:

import csv 

bottle_list = [] 

# Read all data from the csv file. 
with open('a.csv', 'rb') as b: 
    bottles = csv.reader(b) 
    bottle_list.extend(bottles) 

# data to override in the format {line_num_to_override:data_to_write}. 
line_to_override = {1:['e', 'c', 'd'] } 

# Write data to the csv file and replace the lines in the line_to_override dict. 
with open('a.csv', 'wb') as b: 
    writer = csv.writer(b) 
    for line, row in enumerate(bottle_list): 
     data = line_to_override.get(line, row) 
     writer.writerow(data) 
+0

Danke! Das funktioniert perfekt! –

2

Sie können keine einzelne Zeile in der CSV-Datei überschreiben. Sie müssen alle gewünschten Zeilen in eine neue Datei schreiben und sie dann wieder in den ursprünglichen Dateinamen umbenennen.

Ihr Nutzungsmuster passt möglicherweise besser in eine Datenbank als eine CSV-Datei. Sehen Sie sich das sqlite3-Modul für eine leichtgewichtige Datenbank an.

+0

Danke für den Tipp! Ich schaue jetzt in die sqlite3 Dokumentation. Ich werde es wahrscheinlich verwenden, wenn ich mehr Daten habe, die ich herumwerfen kann. Im Moment ist die Lösung der Singularität in Ordnung, weil meine CSV-Datei nicht zu groß ist. –

Verwandte Themen