Wörter in Dokument suchen

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
Fred93
User
Beiträge: 3
Registriert: Sonntag 13. Januar 2019, 11:52

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()
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Fred93
User
Beiträge: 3
Registriert: Sonntag 13. Januar 2019, 11:52

Danke Sirius3 für deine schnelle Antwort, ich habe meinen Code nach deinen Vorgaben bereinigt.
Gibt es keine Möglichkeit, dass die Wörter direkt in der bestehenden Datei ersetzt werden?
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Fred93
User
Beiträge: 3
Registriert: Sonntag 13. Januar 2019, 11:52

Okay und wie könnte ich die Lösung von Sirius3 im Code umsetzen?
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten