Seite 1 von 1

text ersetzen und überschreiben

Verfasst: Montag 22. November 2004, 11:51
von pr0stAta
Hallo alle zusammen.
Ich versuche gerad eine Art Log Datei zu schreiben.
Hier sollen Werte gespeichert werden und dann immer
wieder aktualisiert werden. Die Werte die in der txt Datei stehen, sollen
gefunden und ersetzt werden.
Mein Ansatz war folgender:

Code: Alles auswählen

out = open("Log.txt","r+")
for line in out.readlines():
		if re.findall(Sorte, line):
			trenn_neu = string.split(line, "            ")
			trenn_neu_neu = int(trenn_neu[2])
			trenn_neu_neu -= 1
			trenn_neu_neu = str(trenn_neu_neu)
			a = re.sub(trenn_neu[2], trenn_neu_neu, line)		
			out.write(re.sub(line, a, line))
tabelle sieht so aus:
Wert1 Wert2 Wert3 Wert4
es soll immer nur Wert3 ersetzt und dann in der jeweiligen Zeile
der Datei überschrieben werden. Nur leider schreibt er bei mir
die neueren Werte immer unter die letzte Zeile und dadurch entsteht eine recht große datei ;)
hoffe das problem ist klar :>
mfg prosta

Verfasst: Montag 22. November 2004, 14:45
von Dookie
H prosta,

Das Problem ist soweit klar, nur dein Lösungsansatz nicht ;)
Ich würde so vorgehen:
1. datei umbenennen in <dateiname>.bak
2. datei <dateiname>.bak öffnen zum lesen
3. datei dateiname öffnen öffnen zum schreiben
4. über datei <dateiname>.bak zeilenweise iterieren und die Zeilen bearbeiten und nach <dateiname> schreiben
5. dateien schließen und eventuell <dateiname>.bak löschen.

Bei deiner Lösung musst du vor dem Schreiben erstmal mit out.seek zu der entsprechenden Zeile gehen, dann müssen auch die Zeilen die ersetzt werden nach dem Ersetzen wieder gleich lang sein, denke dabei auch an Unicode, wo nichtmal einzelne Zeichen gleich viele Bytes brauchen.


Gruß

Dookie

Verfasst: Montag 22. November 2004, 14:51
von pr0stAta
Hi Dookie, hatte schonmal was über seek gelesen und war mir
unsicher ob ich das damit schaffen würde. schon weil meine datei nicht
wirklich sauber aufgebaut ist. nun werde ich einfach meine idee
verwerfen und deinen vorschlag übernehmen. hört sich auch einfacher
an :)
danke dafür
gruss prosta