Guten Abend,
ich würde gerne die erste Zeile einer CSV Datei ändern.
Bis her mache ich es so:
Ich lese die CSV Datei ein und lösche die erste Zeile
Ich erstelle eine neue CSV Datei, in der ich die erste Zeile schon geschrieben habe und schreibe die Daten aus der Organal CSV Datei hinten dran.
Das Problem ist das die Datei groß ist und dadurch das ganze etwas dauert.
Gibt es eine Möglichkeit nur die erste Zeile schneller zu ändern?
Viele Grüße
tron46
CSV erste zeile ändern
Sofern du die Zeile durch eine Zeile ersetzt die exakt genauso lang ist, kannst du die Zeile ersetzen ohne eine neue Datei anzulegen. Ansonsten kommst du um den Ansatz den du jetzt nutzt nicht drumherum. Wenn du den Code posten würdest, könnte man aber vielleicht daran noch ein paar Dinge verbessern.
@tron46: So ganz allgemein gibt es keinen schnelleren Weg. Nur falls die Grösse der Zeile in Bytes sich durch die Änderung nicht verändert könnte man das ”in place” machen, aber der allgemeine Weg ist das neuschreiben der Datei mit der geänderten Kopfzeile. Man muss dabei allerdings nicht die ganzen Daten auf einmal in den Speicher laden, denn man kann ja die alte Datei öffnen, die Kopfzeile überlesen, die neue Datei öffnen und die neue Kopfzeile schreiben, und dann direkt für das schreiben der weiteren Zeilen das `reader`-Objekt von der alten Datei als Quelle verwenden (ungetestet):
Mit `islice()` aus dem `itertools`-Modul.
Code: Alles auswählen
with open('old.csv', 'rb') as in_file:
with open('new.csv', 'wb') as out_file:
writer = csv.writer(out_file)
writer.writerow(new_headers)
writer.writerows(islice(csv.reader(in_file), 1, None))