Von Textdatei Input abfragen

  • Guten Abend,

    Ich sitze grade an einem Projekt und versuche wenn ich mein neues Fenster öffne und der text passt einen wert aus einem anderen text abzufragen und wenn dieser gleich ist einen print ausgeben

    Vielen Dank im vorraus :)

  • Hallo,

    wenn du keine Fehlermeldung bekommst, dann läuft der Code doch grundsätzlich. "Funktioniert" nicht ist auch nicht sooo hilfreich als Fehlermeldung...

    Welcher Text vom den prints wird denn ausgegeben? Einer muss ja kommen...

    Bei verschachtelten `with open ...` Statements beide geöffneten Dateien an `f` binden ist auch fehleranfällig... Wenn du beide offen haben willst, dann solltest du die auch an verschiedene Namen binden.

    Syntaktisch muss nach `else: ` keine Zeilenumbruch kommen - macht man aber wegen der Lesbarkeit. So wie du das hast ist das schlechter Stil.

    Und immer _aussagekräftige_ Variablennamen benutzen. tugu und gugu sind vielleicht Baby- oder Kleinkindersprache, aber nichts, wo man wirklich was mit Anfangen kann.

    Gruß, noisefloor

  • Hofei Wenn es eine Methode ist, warum nicht?

    Julius98 Meine Glaskugel sagt, dass das entweder nicht der tatsächliche Quelltext ist, oder das Du ziemlich offensichtlich einen `AttributeError` auf der Konsole sehen müsstest. Gross-/Kleinschreibung macht in Python einen Unterschied.

    “The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents.”
    — Nathaniel Borenstein

  • Hofei Wenn es eine Methode ist, warum nicht?

    Punkt für dich

    Trotzdem würde ich es mir angewöhnen, Build in Funktionsname nicht zu verwenden, auf einmal verwendet man den Namen bei Funktionen und schon ist das Problem da.

    Aber ja, in diesem Fall dürfte es keine Probleme bereiten.

  • Das kommt halt darauf an. Gerade bei `open()`: Wenn es semantisch so etwas wie das öffnen einer Datei oder Verbindung ist, dann sollte man das IMHO besser *nicht anders* nennen, denn alle anderen machen das so, und damit weiss der Leser dann sofort was die Methode macht, und das es sehr wahrscheinlich auch ein `close()` gibt, und man auch gleich mal schauen sollte, ob das Objekt ein Kontextmanager ist und man ``with`` verwenden kann/sollte.

    “The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents.”
    — Nathaniel Borenstein

  • Danke für die Antworten mit groß klein Schreibung passt alles ich hab diesen Code nur nachgestellt für das Forum in meinem Code ist es anders aufgebaut nur die Grundfunktion geht schon nicht :(

  • Julius98 Da steht in der ersten Zeile ja auch garantiert nicht "1" sondern "1\n" und das ist ≠ "1".

    Grundsätzlich solltest Du jede Zeile mit einem Zeilenende-Zeichen abschliessen und auch immer mit so einem Zeichen rechnen und das entfernen.

    Und an der Namensgebung solltest Du dringend arbeiten. Keine Abkürzungen und keine Nummern an Namen und man muss auch nicht jedes Zwischenergebnis an einen Namen binden.

    Die `readline()`-Methode braucht man auch nur *ganz* selten. Dateiobjekte sind Iteratoren über die Zeilen, da kann man `next()` verwenden. Das macht auch einen Unterschied: `readline()` liesst wirklich einzelne Bytes bis das Zeilenendezeichen (oder Dateiende) erreicht ist, während als Iterator verwendet grössere Blöcke gelesen und gepuffert werden. Hier vielleicht nicht relevant, aber man sollte sich das am besten gar nicht erst angewöhnen `readline()` zu verwenden.

    Python
        def lade_irgendetwas(self):
            with open("Mix.txt", "r") as lines:
                self.dasHierBrauchtEinenBesserenNamen.setText(next(lines).rstrip())
                self.dasHierBrauchtEinenBesserenNamenErsatz.setText(next(lines.rstrip()))
    
            if self.dasHierBrauchtEinenBesserenNamenErsatz.text() == "name2":
                print("abfrage passt")
                with open("Range_2.txt", "r") as lines:
                    print("ok" if next(lines).rstrip() == "1" else "falsch")

    “The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents.”
    — Nathaniel Borenstein

  • __blackjack__ schon mal vielen Dank :) Ich bin noch nicht so lange dabei das ist jetzt mein erstes Projekt wo ich so richtig text dateien einbinde bin da noch nicht ganz so drinnen aber muss ja auch lernen... ich versuch dran zu arbeiten aber vielen dank für die Hilfe ich probier es gleich aus.

  • Die `readline()`-Methode braucht man auch nur *ganz* selten.

    zählt da auch f.readlines() dazu? Habe bisher denke ich noch nie was anderes verwendet. Aber man lernt ja nie aus, weswegen das mitlesen auch nie schadet.

    `readline()` liesst wirklich einzelne Bytes bis das Zeilenendezeichen (oder Dateiende) erreicht ist, während als Iterator verwendet grössere Blöcke gelesen und gepuffert werden.

    Und das ergibt was für einen Vorteil/Unterschied?

    Vielen Dank schonmal im Voraus für die Erläuterung:thumbup:

  • readlines ist ok, weil es ja durchaus Fälle gibt, wo man alle Zeilen in einem Rutsch haben will.

    Und zur zweiten Frage: weniger Systemaufrufe sorgen für schnellere Abarbeitung. Es gibt Ausnahmen wo man das nicht will. Zb wenn man ein Protokoll wie HTTP dekodiert. Das ist zu Beginn zeilenbasiert, und dann will man auch nur immer genau eine Zeile einlesen. Bis man erfahren hat, wie groß der Körper des Requests ist, und das dann in einem read(size) einlesen. Da wäre das interne buffern kontraproduktiv, weil der Dateizeiger schon zu weit ist.

  • Hofei Wie @__deets__ schon schrieb ist `readlines()` okay. Allerdings verwende ich das auch nicht weil ``lines = list(file)`` das gleiche macht, aber nicht nur mit Dateiobjekten funktioniert, sondern mit allem was iterierbar ist.

    “The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents.”
    — Nathaniel Borenstein

  • darf ich mal zwischen fragen was der Unterschied im Aufruf von next() und rstrip() zwischen Zeile 3 und Zeile 4 ist:

    Code
                self.dasHierBrauchtEinenBesserenNamen.setText(next(lines).rstrip())
                self.dasHierBrauchtEinenBesserenNamenErsatz.setText(next(lines.rstrip()))
  • kle Nee, darfste nicht, denn dann würde auffallen das ich da einen Fehler gemacht habe. ?

    In der zweiten Zeile ist die Klammer nach `lines` vom `next()`-Aufruf zu weit nach hinten gerutscht.

    “The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents.”
    — Nathaniel Borenstein

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!