In txt Datei nach bestimmten Text suchen und Ausgeben

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.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Hallo,
Ich weiß die Frage wurde schon oft beantwortet, jedoch war die Antwort für mich nicht wirklich schlüssig.
Ich möchte in einer txt nach einem Bestimmten Text suchen, welcher danach Ausgegeben werden soll. Sozusagen eine Datenbank.
In txt Dateien schreiben, kann ich aber wie schaffe ich es dann, dass er mir die gewünschte Zeile mit dem Zielwort ausgibt?
Freue mich auf eure Antworten!

Mfg
Christian
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@rennmaus: Was hast Du denn versucht? Was musst Du denn da konzeptionell machen? Wenn das jetzt keine Datei wäre, sondern Text auf einem Blatt Papier, wie müsstest Du dann vorgehen um eine Zeile mit einem bestimmten Inhalt zu finden? Im Grunde musst Du genau das auch in einem Programm machen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Bin halt noch neu in Python, und kenne daher noch nicht alle Funktionen usw.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann beantworte doch mal __blackjack__s Frage: wie würdest Du auf einem Blatt die Zeile mit einem bestimmten Wort suchen?
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Naja, ich würde einfach Zeile für Zeile nach dem Wort suchen...
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Genau, Du mußt also die Datei Zeilenweise durchgehen und in jeder Zeile nach dem Wort suchen.
Wenn Du weißt, wie man eine Datei schreibt, weißt Du auch bestimmt, wie man eine Datei liest?
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Ja... Allerdings, hatte ich es bisher immer nur, dass ich die ganze Datei ausgegeben habe.
Daher weiß ich nicht wirklich wie ich Python sagen kann, dass es die Datei nach diesem Wort absuchen kann und dann diese Zeile ausgibt.

Vielleicht irgendwie mit file.readline()?

Mfg
Christian
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Probier es aus.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Morgen....
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@rennmaus: Du willst Python ja auch nicht sagen das es *die Datei* nach einem Wort absucht, sondern wie Du das auch mit dem Blatt Papier beschrieben hast, in jeder Zeile nach dem Wort suchen. Programmieren ist zerlegen von Problemen in Teilprobleme, und zerlegen dieser Teilprobleme in noch kleinere Teilprobleme. Solange bis sich ein Teilproblem mit einer Funktion mit ein paar Zeilen Code lösen lässt. Wenn man die kleinsten Teile so gelöst hat, kann man daraus die Probleme lösen die sich aus den gelösten Teilproblemen zusammensetzen. Und am Ende hat man so das Gesamtproblem gelöst.

Du kannst das Gesamtproblem zum Beispiel so aufteilen, dass Du „Finde Wort in Datei und gibt Zeile(n) aus“ in ein Teilproblem „Finde Wort in einer Zeile und gib die gegebenfalls aus“ zerlegen. Wenn Du das kannst, dann kannst Du diese Teillösung nämlich einfach auf jede Zeile in der Datei anwenden. Und hättest damit bereits die Gesamtlösung.

`file.readline()` ist an sich schon nicht schlecht, aber Du willst ja etwas für jede Zeile machen. Also eine Schleife über die Zeilen. Und da gibt es einen einfacheren Weg. Der wird beispielsweise in Python-Tutorial in der Python-Dokumentation gezeigt.

Soll eigentlich jede Zeile mit dem Suchtext ausgegeben werden, oder nur die erste und dann abgebrochen werden?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Nur die erste...
Ich mache gerade eine Datenbank, und möchte dann erreichen, dass man den Namen eingibt, und dann die ganzen Informationen bekommt.
Das alles werde ich morgen mal ausprobieren.
Danke!

Mfg
Christian
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Ich komme nicht weiter... Bei readline kann man ja nur mit Zahlen sagen, welche Zeile es ausgeben soll, aber nicht mit Wörtern.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

__blackjack__ hat es schon gesagt: Du musst dein Problem in Teilprobleme zerlegen. Es gibt nicht die eine Zeile Code, die du eingibst und dann das entsprechende Ergebnis erhälst. Da ist kein fertiger Befehl*.
Du musst deine Werkzeuge - also deine verfügbaren Befehle - so verwenden, das du das gewünschte Ergebnis bekommst.

__blackjack__ hat ja nicht ohne Grund gefragt, wie du das Problem mit einem Text auf einem Blatt Papier lösen würdest. Vielleicht solltest du das mal bis zum Ende durchformulieren. Denn du suchst ja nicht nur Zeile für Zeile, sondern du tust ja auch etwas mit den Zeilen. Und diese vielen Einzelschritte, die musst du dann in Python-Code übertragen.

Mann kann readline() etwas sagen? Soweit ich weiß, nimmt das keine Argumente an und liefert eine Liste zurück, dass alle Zeilen der Datei enhält.
Also dein Blatt Papier. Mit allen Zeilen. Und wann tust du, was du __blackjack__ geantwortet hast, was du mit dem Blatt Papiar tun würdest?

*Ich weiß, ihr Zyniker!
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Naja ich würde vielleicht den Anfangsbuchstaben nehmen, und dann in den Zeilen nach ihm suchen... Ich weiß aber nicht, ob meine Antwort die Antwort ist die mir weiterhilft :)

Mfg
Christian
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sparrow: Ich glaube Du verwechselst da gerade `readline()` mit `readlines()`. `readline()` kennt ein Argument, das ist aber nur *sehr* selten sinnvoll. Ich hätte jetzt ernsthaft Schwierigkeiten mir ein Szenario dafür auszudenken.

@rennmaus: `readline()` kann man nicht per Zahl die Zeile sagen. Da kann man nur sagen wie viele Zeichen maximal gelesen werden sollen bevor der Lesevorgang abbricht. Es können nicht mehr Zeichen gelesen werden, aber weniger falls das Zeilenendezeichen vor dieser maximalen Zeichenanzahl kommt. Falls die maximale Zeichenanzahl der Grund für den Abbruch war, dann steht der Dateizeiger mitten in der Zeile und beim nächsten Lesezugriff wird von der Stelle aus ausgegangen.

Du kannst auch Programme teilweise entwickeln und testen. Also das mit dem Filtern erst einmal weg lassen und ein Programm schreiben das einfach alle Zeilen ausgibt. Wenn Du das hast, dann kannst Du Dir überlegen wie Du da die Filterbedingung und einen Abbruch nach dem ersten Treffer einbaust.

Dein Programm, zumindest so wie Du das Problem beschrieben hast, braucht Grundlagenwissen aus drei Bereichen: Zeichenketten, Schleifen, und Dateien. Alles was Du dafür wissen musst, sollte eigentlich in jedem Grundlagentutorial dran kommen. Es gibt wie schon gesagt ein Tutorial in der Python-Dokumentation.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Ja... Ich wollte das mit dem Filtern machen, weil sonst könnte ich mir ja auch einfach ein ganz normales Dokument nehmen und es mir durchlesen....

Mfg
Christian
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das ist alles mehr Raten als Wissen. So kommst du auf Dauer nicht weiter und merkst dies ja jetzt schon.

Hier ist ein deutsches Python-Tutorial: https://py-tutorial-de.readthedocs.io/de/python-3.3/

Das ist noch für Python 3.3 geschrieben, es ist aber für die meisten Grundlagen immer noch nützlich. Nimm dir 1-2 Tage Zeit zum Lesen und Ausprobieren der Beispiele. Ändere die Beispiele leicht ab und schau, ob das Ergebnis deinen Erwartungen entspricht.

Bitte nicht falsch verstehen. Wir helfen auch Anfängern, aber du bist gerade so eine Art Fußballspieler, der uns fragt, wie man die Schuhe bindet. Soll heißen: So ein bißchen Vorwissen solltest du dir schon selbst aneignen. Und wie gesagt bitte nicht durch das bloße Raten von Funktionsparametern. *Zwinkersmiley
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Kaum ist das Wort im Duden…
*noch 'n Zwinkersmiley*
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@__blackjack__ Oha, du hast recht. Da habe ich readline() und readlines() verwechselt.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Also,
ich habe jetzt eine andere möglichkeit gefunden. Allerdings, habe ich mit dieser ein kleines Problem: Hier mal der Code, das um was es geht:#

filename = (z, ".txt")
file = open (z, 'x')
file.write (z, "/",w, "/",e, "/",r, "/", t)
file.close()

die Buchstaben sind Variablen, welche definiert wurden, aber nachdem ich das Programm ausgeführt habe, bekomme ich eine Datei Datei, soll heißen, keine txt Datei sondern eine Datei, wo hinten in der Spalt Datei steht.
Woran könnte das liegen? Ist der Modus falsch in dem ich die Datei erstelle?

Mfg
Christian
Antworten