!Zeile aus Textdatei ersetzen

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
ilonar
User
Beiträge: 13
Registriert: Donnerstag 13. Dezember 2018, 14:05

Hallo!

Ich bin noch ein Python Neuling und komme bei dem folgend beschriebenen Problem leider nicht weiter.

Ich möchte gerne mit meinem Python Skript eine Datei öffnen und die Zeilen lesen. Dann möchte ich eine Abfrage starten: wenn in einer Zeile xyz steht, ersetze diese Zeile mit zB abc.
ich habe es schon mit line.replace versucht, doch das funktioniert leider nicht.
Mit dem aktuellen Code wird bisher nur die line xyz gelöscht, doch wie kann ich diese nun ersetzen?

ich hoffe jemand kann mir dabei helfen.

Code: Alles auswählen

inp = open('test.txt', 'r',)
out = open('test_out.txt', 'w')
lines=inp.readlines()

for line in lines:
	if line!='xyz'+'\n':
		line.replace(line,'abc')
		out.write(line)
inp.close()
out.close()
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Doch, line replace ist schon der richtige Ansatz. Nur sind Strings in Python unveraenderlich. Du veraenderst also nicht line, sondern du bekommst einen NEUEN string zurueck.

Du musst also das Ergebnis wieder an line zuweisen, damit weiterer Code dann mit der veraenderten Variante arbeitet.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

noch ein paar Anmerkungen: Dateien öffnet man am besten mit dem with-Statement und iteriert direkt über das File-Objekt. Eingerückt wird immer mit 4 Leerzeichen, keine Tabs. Wenn Du die gesamte Zeile durch einen fixen Text ersetzt, dann ist replace irgendwie überflüssig.

Ich rate mal, wie das eigentlich aussehen sollte:

Code: Alles auswählen

with open('test.txt') as lines, open('test_out.txt', 'w') as output:
    for line in lines:
        if line == 'xyz\n':
            line = 'abc\n'
        output.write(line)
ilonar
User
Beiträge: 13
Registriert: Donnerstag 13. Dezember 2018, 14:05

Sirius3 hat geschrieben: Donnerstag 13. Dezember 2018, 15:04 noch ein paar Anmerkungen: Dateien öffnet man am besten mit dem with-Statement und iteriert direkt über das File-Objekt. Eingerückt wird immer mit 4 Leerzeichen, keine Tabs. Wenn Du die gesamte Zeile durch einen fixen Text ersetzt, dann ist replace irgendwie überflüssig.

Ich rate mal, wie das eigentlich aussehen sollte:

Code: Alles auswählen

with open('test.txt') as lines, open('test_out.txt', 'w') as output:
    for line in lines:
        if line == 'xyz\n':
            line = 'abc\n'
        output.write(line)
Hallo, vielen Dank für die Antworten!
Das mit dem Line ersetzen ist mir ungefähr 10 Minuten nachdem ich den Post verfasst habe, auch aufgefallen.
Kannst du mir noch mal den Vorteil von with erklären?
Sorry, totaler python Neuling!
Antworten