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

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!
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten