2016-12-02 5 views
1

Ich versuche, bestimmte Zellen in einer CSV-Datei mit Python neu zu schreiben.Python - CSV-Datei leer nach dem Umschreiben mit csv-Modul

Immer wenn ich versuche, einen Aspekt der CSV-Datei zu ändern, wird die CSV-Datei jedoch geleert (der Inhalt der Datei wird leer).

Minimal Codebeispiel:

import csv 
ReadFile = open("./Resources/File.csv", "rt", encoding = "utf-8-sig") 
Reader = csv.reader(ReadFile) 
WriteFile = open("./Resources/File.csv", "wt", encoding = "utf-8-sig") 
Writer = csv.writer(WriteFile) 
for row in Reader: 
    row[3] = 4 
    Writer.writerow(row) 
ReadFile.close() 
WriteFile.close() 

'file.csv' sieht wie folgt aus:

1,2,3,FOUR,5 
1,2,3,FOUR,5 
1,2,3,FOUR,5 
1,2,3,FOUR,5 
1,2,3,FOUR,5 

In diesem Beispiel ich bin versucht, 'VIER' bis '4' zu ändern.

Nach dem Ausführen dieses Codes wird die CSV-Datei stattdessen leer. Die einzige andere Frage, die damit zusammenhängt, die ich gefunden habe, ist this one, die nicht mit dem Umschreiben bestimmter Zellen in einer CSV-Datei zu tun hat, sondern stattdessen mit dem Schreiben neuer Zeilen in eine CSV-Datei befasst ist .

Ich wäre sehr dankbar für jede Hilfe, die jeder lesen könnte.

+1

Öffnen Sie die Datei mit 'a +' statt. –

+0

@ j-darbyshire Ich habe "rt" und "wt" durch "a +" ersetzt und es wischt immer noch die Datei ab. Mache ich es falsch? – Luke25361

+1

Setzen Sie den Leser auf den Anfang der Datei. Direkt unterhalb der Zeile 'ReadFile = open ...' füge die Zeile 'ReadFile.seek (0)' hinzu. Jetzt sollte der Code wie erwartet ausgeführt werden. –

Antwort

2

Folgendes sollte funktionieren:

import csv 

with open("./Resources/File.csv", "rt", encoding = "utf-8-sig") as ReadFile: 
    lines = list(csv.reader(ReadFile)) 

with open("./Resources/File.csv", "wt", encoding = "utf-8-sig") as WriteFile: 
    Writer = csv.writer(WriteFile) 
    for line in lines: 
     line[3] = 4 
     Writer.writerow(line) 
+0

Das ist perfekt, vielen Dank! :) – Luke25361

2

Wenn Sie einen Brenner mit der Option w öffnen, wird der Inhalt gelöscht und die Datei neu geschrieben. Die Datei ist daher zu dem Zeitpunkt, an dem Sie zu lesen beginnen, leer.

Versuchen Sie, in eine andere Datei (wie FileTemp.csv) zu schreiben und am Ende des Programms FileTemp.csv in File.csv umzubenennen.

+0

Danke, das scheint das logischste in dieser Situation zu sein. :) – Luke25361

Verwandte Themen