Zeichenkette in Datei ersetzen/einfügen

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
worker
User
Beiträge: 2
Registriert: Sonntag 17. Juli 2011, 20:22

Moin,

hab mich durch diverse Google-Seiten versucht schlau zu machen, doch bisher nichts gescheites gefunden.

Wie schafft man es, Text unterschiedlicher länge in einer Datei zu _ersetzen_ ?
Alle meine Versuche, einen Text (z.B. ein Wort) zu ersetzen klappen soweit ganz gut, wenn sich die Länge des Textes/Wortes nicht ändert.

Beispiel:

Gegeben in der Datei ist:
Heutiges_Datum=
Heutige_Uhrzeit=

Nach geschriebenem Datum in die Datei, sieht diese wie folgt "deformiert" aus:
Heutiges_Datum=17.07.2011rzeit=

Sprich: Das Datum wird nicht eingefügt, sondern "reingeschrieben" und damit der Inhalt des weiteren "Textes" überschrieben.

Meine Frage ist nun, wie löse ich das Problem?

Mein Quellcode (Funktion) für das Ersetzen bzw. Setzen von Texten/Variablen sieht wie folgt aus:

Code: Alles auswählen

def write_runtime_var(option, value):
	my_file = open(PRG_PATH+"my_script.ini", "r+")
	
	while True:
		line = my_file.readline()
		
		if not line:
			break
		else:
			RW = line.find(option + "=")
			
			if RW != -1 and line[0] != "#":
				# Zeile NACH und VOR dem "=" splitten:
				line_tmp = line.split("=")
				# Stringlänge nach dem "=" ermitteln:
				line_tmp_r = int(len(line_tmp[1]))
				
				# Position in der Datei ermitteln:
				position = my_file.tell()
				
				# DateiZeiger-Position nach dem "=" setzen:
				position = (position-line_tmp_r)
				my_file.seek(position,0)
				
				# String schreiben:
				my_file.write(str(value))
	
	my_file.close()
	
	return
Danke.

LG worker
BlackJack

@worker: Die übliche Lösung ist es die Zeichenketten nicht in der Datei zu ersetzen, sondern eine neue Datei zu schreiben und die dann in die ursprüngliche Datei umzubenennen. Alles andere ist bei heute üblichen Dateisystemen umständlich und unsicher was zum Beispiel einen Programmabbruch während der Änderung betrifft.
deets

@worker

BlackJack hat natuerlich recht mit seinen Anmerkungen fuer den allgemeinen Fall. In deinem speziellen wuerde ich dir aber zusaetzlich raten, erst gar nicht so vorzugehen, wie du das tust. Sondern stattdessen einen ConfigParser zu verwenden (entweder den eingebauten, oder das Modul configobj). Damit liest du dann die Konfiguration ein (1te Zeile), aenderst den gewuenschten Wert (2te Zeile) und schreibst sie wieder weg (3te Zeile).
worker
User
Beiträge: 2
Registriert: Sonntag 17. Juli 2011, 20:22

Aha, verstehe.

Danke Euch beiden :)

Werde mir dann mal zusätzlich den ConfigParser anschauen.

Merci & LG
worker
Antworten