Mehere Wörter in Datei ändern

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
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

Hallo,
ich habe folgendes Problem:
Ich lese folgende Datei ein:
la la le lu
python nervt
c++ ist klasse
la la lu
Jetzt möchte ich "python" durch fortran ersetzen und den geänderten text in eine neue datei speichern. Dies klappt auch.

Also zweites möche ich "c++" durch "python" ersetzten, der Code sieht nun so aus:

Code: Alles auswählen

[code]# -*- coding: utf-8 -*-
import string
import re

fname    = "datei.txt"
new_name = "fortran" 
new_name2 = "python"

infile  = open(fname,"r")
outfile = open(fname[:5] + "_changed.txt",'a')  

for line in infile:
   aenderung1 = line.replace("python",new_name)
   #aenderung2 = line.replace("c++",new_name2) 
   outfile.write(aenderung1)  

for line in infile:
   aenderung2 = line.replace("c++",new_name2) 
   outfile.write(aenderung2)  

infile.close()
[/code]

Es funktioniert aber nicht, c++ wird nicht geändert. Kann mir jemand helfen??
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Nach der ersten Schleife bist du am Ende der Datei angelangt, der Inhalt der zweiten wird also niemals ausgeführt. Du musst daher entweder die Datei noch einmal neu öffnen (schau dir auf jeden Fall das with-Statement an, das macht einiges einfacher) oder du springst zurück zum Dateianfang. Und noch einfacher: du machst beide Änderungen in einer Schleife:
Das Leben ist wie ein Tennisball.
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

Die Idee mit alles in einer schleife hatte ich auch schon:

Code: Alles auswählen

# -*- coding: utf-8 -*-
import string
import re

fname    = "datei.txt"
new_name = "fortran" 
new_name2 = "python"

infile  = open(fname,"r")
outfile = open(fname[:5] + "_changed.txt",'a')  

for line in infile:
   aenderung1 = line.replace("python",new_name)
   aenderung2 = line.replace("c++",new_name2) 
   aenderung = aenderung1 + aenderung2
   outfile.write(aenderung)   
infile.close()
Ergebnis sieht dann so aus:
la la le lu
la la le lu
fortran nervt
python nervt
c++ ist klasse
python ist klasse
la la lu
la la lu
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

for line in infile:
    aenderung = line.replace("python", new_name).replace("c++", new_name2)
    outfile.write(aenderung)
oder in lang

Code: Alles auswählen

for line in infile:
    aenderung = line.replace("python", new_name)
    aenderung = aenderung.replace("c++", new_name2)
    outfile.write(aenderung)
Das Leben ist wie ein Tennisball.
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

ja spitze, vielen Dank !!
Antworten