Liste aus txt-Datei lesen, ein Element ändern und speichern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SVblue
User
Beiträge: 15
Registriert: Montag 3. Februar 2014, 15:48

Hallo,

habe hier eine txt-Datei mit nur einer Zeile

Beispieldaten (Semikolon als Separator):
0;0000001;132;A4710781144;001;24.07.2014 08:23:04;11,2;9,9

Das Auslesen der Werte funktioniert soweit:

Code: Alles auswählen

data = open("Dateiname.txt", 'r').readlines()
inhalt = data[0].split(";")
Nun würde ich gern Element an Position 2 = Wert: 132 z.B. in Wert: 256 ändern und wieder in die Datei schreiben.

Wie kann man einzelnen Elemente ändern, sowohl in der ausgelesenen Liste und dann auch in der Datei???
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

SVblue hat geschrieben:Wie kann man einzelnen Elemente ändern, sowohl in der ausgelesenen Liste und dann auch in der Datei???
Elementzugriff kennst du eigentlich. Du hast ja auch schon mit data[0] auf das erste Element von data zugegriffen.

Das Element mit Index 2 bekommst du folglich mit inhalt[2] und kannst dort einen neuen Wert zuweisen.

Jetzt brauchst du nur noch eine Methode um das split(";") quasi umzukehren und die Liste wieder in einen mit Semikolons getrennten String zu verwandeln. Dafür bietet sich die join-Methode eines Strings an.

Die Datei kannst du dann einfach komplett neu schreiben.
SVblue
User
Beiträge: 15
Registriert: Montag 3. Februar 2014, 15:48

Code: Alles auswählen

f.writelines(";".join(Liste))
Das ist es!

Bist ein Engel, Danke.
BlackJack

@SVblue: Fast, es sollte eher `writeline()` sein. `writelines()` erzeugt für jedes einzelne Zeichen/Byte einen eigenen `write()`-Aufruf auf der Datei, was sehr ineffizient ist. Und wenn Du sowieo nur an der ersten Zeile aus der Datei interessiert bist, und eventuell vorhandene weitere Zeilen beim schreiben gelöscht werden dürfen, dann würde man auch nicht `readlines()` verwenden, sondern zum Beispiel mit `next()` einfach die erste Zeile lesen. Sollten eventuelle Folgezeilen allerdings relevant sein, dann muss man alle Zeilen lesen, und danach dann auch *alle* wieder schreiben, und nicht nur die veränderte.
Antworten