Schreiben mit Python ' s built-in .csv-Modul
[Bitte beachten Sie, dass dies eine andere Frage, die bereits beantwortet So ersetzen Sie eine Spalte mithilfe von Python ' s built-in .csv-writer-Modul?]
Ich tun müssen, um einen finden und ersetzen (spezifisch für eine Spalte mit URLs) in eine riesige Excel .csv-Datei. Da bin ich in der Anfangsphase der versucht, mir beibringen, eine scripting-Sprache, ich dachte, ich würde versuchen, implementieren die Lösung in python.
Ich habe Probleme wenn ich versuche zu schreiben, wieder ein .csv-Datei nach einer änderung des Inhalts eines Eintrags. Ich habe gelesen, die offizielle csv-Modul-Dokumentation darüber, wie Sie mithilfe der writer, aber es ist nicht ein Beispiel, umfasst in diesem Fall. Speziell, ich versuche, das Lesen, ersetzen und write-Operationen in einem durchgeführt Schleife. Jedoch kann man nicht verwenden das gleiche 'Zeile' - Referenz sowohl in der for-Schleife das argument und der parameter für writer.writerow(). So, nachdem ich die änderung in der for-Schleife, wie sollte ich zurück schreiben in die Datei?
edit: ich umgesetzt die Vorschläge von S. Lott und Jimmy, immer noch das gleiche Ergebnis
edit #2: ich fügte hinzu, die "rb" - und "wb" auf die open () - Funktionen, pro S. Lott ' s Vorschlag
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)
edit: Für Ihre Referenz, das ist der neue vollen traceback für den 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?)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht Lesen und schreiben der gleichen Datei.
Den normalen Ansatz, um ALLE file-manipulation erstellen Sie eine modifizierte KOPIE der original-Datei. Nicht versuchen, update-Dateien. Es ist einfach ein schlechter plan.
Bearbeiten
In den Zeilen
Den "rb" - und "wb" sind absolut erforderlich. Jedes mal, wenn Sie ignorieren diese, Sie öffnen die Datei zum Lesen in die falsche format.
Müssen Sie das "rb" zu Lesen .CSV-Datei. Es gibt keine Wahl mit Python 2.x. Mit Python 3.x, können Sie dies auslassen, aber verwenden Sie "r" ausdrücklich klar zu stellen.
Müssen Sie das "wb" zu schreiben .CSV-Datei. Es gibt keine Wahl mit Python 2.x. Mit Python 3.x, Sie müssen verwenden Sie "w".
Bearbeiten
Es scheint, Sie sind mit Python ist3. Sie müssen, um die drop "b" von "rb" - und "wb".
Lesen: http://docs.python.org/3.0/library/functions.html#open
Öffnen von csv-Dateien als binäre ist einfach falsch. CSV sind normale text-Dateien, so dass Sie brauchen, um Sie zu öffnen mit
Den Fehler
kommt, weil Sie Sie zu öffnen im Binär-Modus.
Als ich war, öffnen von excel-csv ' s mit python, früher habe ich so etwas wie:
und es ging ziemlich schnell (ich war die Eröffnung von zwei etwa 10MB jede csv-Dateien, allerdings habe ich das mit python 2.6, nicht die 3.0 version).
Gibt es nur wenige funktionierende Module für die Arbeit mit excel-csv-Dateien in python - pyExcelerator ist einer von Ihnen.
das problem ist man versucht zu schreiben, um die gleiche Datei, die Sie gerade Lesen, aus. schreiben in eine andere Datei, und benennen Sie Sie nach dem löschen der Originale.