Von Textdatei Input abfragen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • 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.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

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

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • 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")

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • __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.

  • 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()))

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!