Seite 1 von 1

Zeile in Datei ersetzen

Verfasst: Mittwoch 18. Juli 2018, 14:15
von recnice
Hallo zusammen,

nach langem bin ich mal wieder am programmieren und stehe gerade auf dem Schlauch, vielleicht kann mir jemand helfen.

Was ich tun möchte: ich möchte eine Datei einlesen und die Zeile "*INCLUDE_PATH" durch ein "$" ersetzten, das Gleich soll dann mit dem eigentlich Pfad geschehen der in der nächsten Zeile folgt und das ganze wird in eine neue Datei geschrieben

Code: Alles auswählen

with open(key_file[0]) as key_input:
	with open(InfileFile,"w") as output:
		lines = key_input.readlines()
		for line in lines:
			if "*INCLUDE_PATH" in line:

				teco_output.write("$")
				index=lines.index(line)
					
				line=lines[index+1]
				new_line=line.replace(line,"$")						
				output.write(new_line)
				
			else:
				output.write(line)
das Keyword "*INCLUDE_PATH" wird ersetzt, der darauf folgende Eintrag aber nicht....

Woran liegt's? Hat jemand Vorschläge?

Danke!

Re: Zeile in Datei ersetzen

Verfasst: Mittwoch 18. Juli 2018, 14:58
von __blackjack__
@recnice: Naja, das passiert in gewisser weise schon, aber die Zeile wird danach noch mal verarbeitet.

Das ist aber auch alles äusserst ineffizient per `index()` eine Zeile zu suchen wo man doch sowieso schon gerade über die Zeilen iteriert. Man muss die für die Aufgabe auch nicht alle in den Speicher lesen. Und ein `line.replace(line, '$') sucht die ganze Zeile in sich selbst um dann die Ersetzung der ganzen gesuchten und natürlich auch gefundenen Zeile zu machen. Das ist ziemlich sinnfrei, da kann man auch ohne die Zeile zu kennen einfach '$' in die Datei schreiben.

Die Namen sind komisch. `InfileFile` ist der Dateiname für eine Datei die dann `output` heisst? Wo kommt `teco_output` her? Und willst Du keine Zeilenenden schreiben bei den ersetzen Werten?

Code: Alles auswählen

            for line in key_input:
                if '*INCLUDE_PATH' in line:
                    line = '$\n'
                    output.write(line)
                    next(key_input)  # Skip line with path.
                output.write(line)