Hallo,
ich bin Anfänger im programmieren und stehe vor folgendem Problem:
Ich habe eine Liste mit zwei Spalten aus einer .txt-Datei erstellt. Nun soll mein Programm in einer anderen .txt-Datei beispielsweise nach dem Eintrag liste[0][0] suchen und diesen durch liste[0][1] ersetzen. Im nächsten Schritt soll dann nach dem Eintrag liste[1][0] gesucht werden und durch den Eintrag liste[1][1] ersetzt werden usw..
Ich bin schon so weit, dass dies funktioniert, wenn der gesuchte Begriff sich in der zweiten Datei in der gleichen Zeile befindet wie in der ersten .txt-Datei.
Aber wie bekomme ich es hin, dass der gesuchte Text in der zweiten Datei an einer beliebigen Stelle stehen kann und ersetzt wird?
Mein Code sieht aktuell so aus:
import sys
filename = "test3.txt"
mode = "r"
try:
file = open("test3.txt", "r")
except:
print("Konnte die angegebene Datei nicht öffnen !")
lines = file.readlines()
number_of_lines = len(lines)
file.close()
dateiname = "test3.txt"
a = []
with open("test3.txt", 'r') as f:
for line in f:
line=line.rstrip()
line=line.split("=")
a.append(line)
file = open("test3.txt", "r")
i = number_of_lines
import fileinput, sys
k=0
l=0
for j in range(1, i):
if a[k][l] in file.read():
for line in fileinput.input("Beispiel2.txt",inplace=1):
line = line.replace("'"+a[k][l]+"'", "'"+a[k][l+1]+"'")
sys.stdout.write(line)
if k < i-1:
k=k+1
file.close()
Wörter in Dokument suchen
Zuerst zum Code: bitte Codetags </> benutzen, damit man das Programm im Forum auch lesen kann.
sys wird importiert aber nicht verwendet.
filename und mode werden definiert, aber nicht verwendet.
Die Fehlerbehandlung bei file ist quatsch und sollte gelöscht werden. Fehler, die nicht sinnvoll behandelt werden können, sollten gar nicht behandelt werden. Nach der Fehlerbehandlung sollte das Programm weiterlaufen können, was bei Dir nicht der Fall ist. Es kommt zu einem Folgefehler, da file.readline nicht ausgeführt werden kann.
number_of_lines und i (was eine unsinnige Umbenennung einer ansonsten gut benannten Variable ist) wird nicht gebraucht, weil man besser immer auf len(lines) zugreift, dann ist klar, von welcher Anzahl gesprochen wird.
dateiname wird definiert aber nicht verwendet.
`a` ist ein schlechter Variablenname, wie alle einbuchstabigen, weil er nichts über den Inhalt aussagt. Warum wird jetzt die selbe Datei nochmal gelesen?
Und später noch einmal?
Das `replace` mit den Anführungszeichen sieht etwas seltsam aus. Statt fileinput gibt es meist bessere Alternativen.
Zum Problem:
Du mußt die Lösung umdrehen. Es gibt zwei Schritte: Einlesen der Ersetzungstabelle aus `test3.txt`; das Ergebnis ist ein Wörterbuch Eintrag -> Ersetzung.
Zweiter Schritt: Beispiel2.txt zeilenweise Einlesen im Wörterbuch nach dem Eintrag suchen und Ersetzung durchführen. Zeile dann in eine neue Datei `Beispiel2.ersetzt` schreiben.
sys wird importiert aber nicht verwendet.
filename und mode werden definiert, aber nicht verwendet.
Die Fehlerbehandlung bei file ist quatsch und sollte gelöscht werden. Fehler, die nicht sinnvoll behandelt werden können, sollten gar nicht behandelt werden. Nach der Fehlerbehandlung sollte das Programm weiterlaufen können, was bei Dir nicht der Fall ist. Es kommt zu einem Folgefehler, da file.readline nicht ausgeführt werden kann.
number_of_lines und i (was eine unsinnige Umbenennung einer ansonsten gut benannten Variable ist) wird nicht gebraucht, weil man besser immer auf len(lines) zugreift, dann ist klar, von welcher Anzahl gesprochen wird.
dateiname wird definiert aber nicht verwendet.
`a` ist ein schlechter Variablenname, wie alle einbuchstabigen, weil er nichts über den Inhalt aussagt. Warum wird jetzt die selbe Datei nochmal gelesen?
Und später noch einmal?
Das `replace` mit den Anführungszeichen sieht etwas seltsam aus. Statt fileinput gibt es meist bessere Alternativen.
Zum Problem:
Du mußt die Lösung umdrehen. Es gibt zwei Schritte: Einlesen der Ersetzungstabelle aus `test3.txt`; das Ergebnis ist ein Wörterbuch Eintrag -> Ersetzung.
Zweiter Schritt: Beispiel2.txt zeilenweise Einlesen im Wörterbuch nach dem Eintrag suchen und Ersetzung durchführen. Zeile dann in eine neue Datei `Beispiel2.ersetzt` schreiben.
Nein. Das Betriebssystem erlaubt kein einfügen. Nur überschreiben, und das würde dann nur erfolgreich sein, wenn alle Wörter immer gleich lang sind. Und performanter auch eher nicht, da eh blockweise geschrieben und gelesen wird.
Indem du dich vor deinen Computer setzt, und anfaengst auf der Tastatur zu tippen? Oder war die Frage eigentlich, ob es jemand anderen gibt, der dir fuer lau dein Problem loest? Das passiert hier eher selten. Wir helfen gerne bei Unverstaendnis, aber das bemuehen um eigene Loesungen und das verstehen und verarbeiten der gebrachten Hinweise muss schon erkennbar sein. Probier die Hinweise von Sirius3 umzusetzen, und wenn du da nicht weiter kommst, zeig, was du hast, und man kann dir weiter helfen.