Python Lesen/Schreiben in eine Textdatei (gleichzeitig)

TuxuT

Ensign
Registriert
Sep. 2011
Beiträge
251
Hallo Gemeinde.

Ich würde gerne ein Textfile nach einem Schlüsselwort absuchen und dieses Schlüsselwort durch z.B. ein Datum ersetzen.
Das ist mit Python3 ja nicht sooo schwierig.
Ich strande aber gerade daran, nach der Ersetzung mit replace(), die neue Textzeile in die Quelldatei zurück zu schreiben.
Funktioniert das überhaupt? Oder muss ich von der Quelldatei erst eine temporäre Kopie unter einem anderen Namen machen und diese zum Lesen Öffnen?
Die Textdatei lese ich derzeit folgendermaßen ein:

file = open( "test.txt, "r")

for line in file:
line = line.replace("keyword", "aktuelles Datum")
file.write(line) # zurückschreiben des Ergebnisses, geht so natürlich nicht

file.close()

Hat jemand einen Tipp für mich, wie ich das hinbekommen?
DANKE!
 
Ersetze mal im open Befehl das "r" durch ein "w"
bzw. "a" für append

Du bist im Read Only Modus


Quatschnee vergiss das.

siehe auch hier:
https://www.guru99.com/reading-and-writing-files-in-python.html

Also:
Mit "r" geöffnet kannst du natürlich nichts schreiben.

Du könntest aber die Datei komplett einlesen, danach das File wieder schließen.
Dann machst du auf den eingelesenen Daten die Textersetzung.
Anschließend öffnest du das File wieder mit "w", dadurch wird das vorhandene gelöscht und neu erstellt, und du schreibst den veränderten Inhalt da rein.
Benutzte am besten "w+" für den Fall, dass es die Datei noch gar nicht gibt.

edit:
offenbar gibt es mit Pyhton 3 wohl auch "r+", damit kannst du direkt auf das zum lesen geöffnete File schreiben. Kannte ich auch noch nicht.

Aber btw. das ist alles in 5 Minuten ergooglebar
 
Zuletzt bearbeitet:
datei lesen & inhalt ersetzen, dann datei neu öffnen, dabei leeren und neu schreiben, wie von @Grimba beschrieben
Python:
with open('my_file.txt', 'r') as f:
    a = f.read().replace('keyword', 'datum')

with open('my_file.txt', 'w') as f:
    f.write(a)

datei lesen & inhalt ersetzen, position innerhalb der datei auf den anfang setzen, den rest abschneiden (= datei leeren), neu schreiben
Python:
with open('my_file.txt', 'r+') as f:
    a = f.read().replace('keyword', 'datum')
    f.seek(0)
    f.truncate()
    f.write(a)
 
TuxuT schrieb:
Ich würde gerne ein Textfile nach einem Schlüsselwort absuchen und dieses Schlüsselwort durch z.B. ein Datum ersetzen. Das ist mit Python3 ja nicht sooo schwierig.
Muss es unbedingt Python sein?
$> perl -pi.bak -e 's/KEYWORD/localtime/e' test.txt
Liefert das geänderte test.txt und behält das Original als test.bak.
 
na dann kann man auch gleich sed "s/keyword/$(date)/g" input.txt > output.txt bzw. sed -i "s/keyword/$(date)/g" input.txt nehmen :)
 
  • Gefällt mir
Reaktionen: abcddcba
Zurück
Oben