[Bitte beachten Sie, dass dies eine andere Frage ist als die bereits beantwortete Wie ersetzt man eine Spalte mit Pythons eingebautem .csv-Writer-Modul? ]
Ich muss eine Such- und Ersetzungsfunktion (speziell für eine Spalte mit URLs) in einer großen Excel-CSV-Datei ausführen. Da ich gerade dabei bin, mir eine Skriptsprache beizubringen, dachte ich mir, dass ich versuchen würde, die Lösung in Python zu implementieren.
Ich habe Probleme, wenn ich versuche, in eine .csv-Datei zurückzuschreiben, nachdem ich eine Änderung am Inhalt eines Eintrags vorgenommen habe. Ich habe die offizielle Dokumentation zum csv-Modul wie der Schreiber zu verwenden ist, aber es gibt kein Beispiel, das diesen Fall abdeckt. Konkret versuche ich, die Operationen Lesen, Ersetzen und Schreiben in einer Schleife durchzuführen. Man kann jedoch nicht dieselbe "row"-Referenz sowohl im Argument der for-Schleife als auch als Parameter für writer.writerow() verwenden. Wie soll ich also, nachdem ich die Änderung in der for-Schleife vorgenommen habe, wieder in die Datei schreiben?
bearbeiten: Ich habe die Vorschläge von S. Lott und Jimmy umgesetzt, immer noch das gleiche Ergebnis
edit #2: Auf Vorschlag von S. Lott habe ich die Funktionen "rb" und "wb" zu den open()-Funktionen hinzugefügt
import csv
#filename = 'C:/Documents and Settings/username/My Documents/PALTemplateData.xls'
csvfile = open("PALTemplateData.csv","rb")
csvout = open("PALTemplateDataOUT.csv","wb")
reader = csv.reader(csvfile)
writer = csv.writer(csvout)
changed = 0;
for row in reader:
row[-1] = row[-1].replace('/?', '?')
writer.writerow(row) #this is the line that's causing issues
changed=changed+1
print('Total URLs changed:', changed)
bearbeiten: Zu Ihrer Information, dies ist die neu vollständiger Traceback vom Interpreter:
Traceback (most recent call last):
File "C:\Documents and Settings\g41092\My Documents\palScript.py", line 13, in <module>
for row in reader:
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)