text ersetzen und überschreiben

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.
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

text ersetzen und überschreiben

Beitragvon pr0stAta » Montag 22. November 2004, 11:51

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Montag 22. November 2004, 14:45

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

Code: Alles auswählen

#!/usr/bin/env python
import this
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Beitragvon pr0stAta » Montag 22. November 2004, 14:51

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]