os.path.exists Fehler

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
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Wieder einmal will mich Python verarschen:

Code: Alles auswählen

        if not os.path.exists('serverfloder.txt'):
            open('serverfloder.txt', 'w').close()

        with open('serverfloder.txt', 'r+') as self.serverfile:
            print(self.serverfile.read())
            print(os.path.exists(self.serverfile.read()))
            if not os.path.exists(self.serverfile.read()):
                self.serverfloder = tkinter.filedialog.askdirectory()
                self.serverfile.write(self.serverfloder)
Es kommt jedes mal, das filedialog Fenster, und wenn ich in der shell dann den Pfad eingebe der mit Print ausgegeben wird kommt bei mir immer True raus, aber wenn ich es ausführe steht da immer False, wo ist der Fehler? Und irgendwie stimmt da mit dem Lese/Schreibmodus nicht ...
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Py-Prog hat geschrieben:

Code: Alles auswählen

        with open('serverfloder.txt', 'r+') as self.serverfile:
            print(self.serverfile.read())
            print(os.path.exists(self.serverfile.read()))
            if not os.path.exists(self.serverfile.read()):
                [...]
Es kommt jedes mal, das filedialog Fenster, und wenn ich in der shell dann den Pfad eingebe der mit Print ausgegeben wird kommt bei mir immer True raus, aber wenn ich es ausführe steht da immer False, wo ist der Fehler? Und irgendwie stimmt da mit dem Lese/Schreibmodus nicht ...
Deine Beschreibung ist wie gewohnt relativ unverständlich.

Meine Vermutung ist, dass du in serverfloder.txt den Namen einer Datei stehen hast die benutzt werden soll. Den Dateinamen liest du für das print aus, allerdings möglicherweise mit einem Zeilenumbruch am Ende. Anschließend führst du noch mehrmals read() für die Datei aus. Welche Daten sollen denn da noch kommen, wenn du bereits bis zum Ende gelesen hast?
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Wenn du die Sprache nicht verstehen kannst, dann lies mal den Code. (Echt was ist da nicht verständlich?)
Da sieht man das du nicht richtig hin siehst.

Diese Prints sind blos das ich sehen kann was der Interpreter da zurückgibt,
Und wenn das Verzeichnis nicht existiert dann wird mit Filedialog ein Ordner ausgewählt und der dann halt in der Datei gespeichert.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Hallo Py-Prog,

/me hat völlig Recht und du solltest vielleicht etwas auf deinen Ton achten. /me muss auch nicht "richtig" hinsehen - es ist deine Aufgabe, dein Problem so aufzubereiten, dass wir dir helfen können, ohne uns erst zu überlegen, was du möglicherweise wollen oder meinen könntest.

Python will dich im Übrigen auch nicht "verarschen" - du hast einfach einen sehr offensichtlichen Fehler gemacht, weswegen die letzte if-Abfrage immer wahr sein wird ("if not..."). Vielleicht hättest du mal richtig hinsehen sollen?

Gruß,

brb
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Py-Prog hat geschrieben:Wenn du die Sprache nicht verstehen kannst, dann lies mal den Code. (Echt was ist da nicht verständlich?)
Da sieht man das du nicht richtig hin siehst.
Ich habe dir deinen Programmierfehler erklärt. Mehr kann ich nicht tun und mehr will ich jetzt definitiv auch nicht tun.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Wo hast du bitte gesagt was der Fehler ist, wenn du meinst es liegt an den Read liegt, es liegt nicht daran, ohne diese Print geht auch nicht.
Und um das noch mal kurz zu erklären:
auf der shell existiert für den Ip der Pfad
und in wenn ich in der IDLE auf F5 drücke und damit das Programm starte, Steht in der Konsole immer False was für mich heißt das für den Ip der pfad nicht existiert.
UND: der Pfad sind ein und der selbe!
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dir ist klar, was ein `fileobj.read()` bewirkt? Das wurde Dir ja nun bereits erklärt, aber offensichtlich hast Du das noch nicht verstanden.
auf der shell existiert für den Ip der Pfad
Was ist ein `lp`?

Was steht denn in der Datei drin?

Klappt das denn mit einer fixen Angabe?

Generell würde ich das Auslesen von der Logik trennen. Imho sollte man IO-Operationen separat zur weiteren Verarbeitung durchführen, es sei denn, die Größe der Datei gibt das nicht her. In Deinem Falle wäre es sinnvoll, eine Funktion zu schreiben, die den Inhalt der Datei einfach zurückliefert. Diesen Funktionsaufruf kannst Du dann nämlich leicht gegen einen fixen String oder einen Kommandozeilenparameter ersetzen.

Last but not least: Wieso nutzt Du nicht ein Standardformat wie das INI-Format? (ConfigParser-Modul!)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Wer python kann könnte auch heraus lesenwas die Datei genau enthält, hab ich auch gesagt.
Die Datei enthält einen Pfad!!!
Ip ist Interpreter
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Py-Prog hat geschrieben:Wer python kann könnte auch heraus lesenwas die Datei genau enthält, hab ich auch gesagt.
Nur weil man Python "kann", wissen wir doch noch nicht, was genau in Deiner Datei drin steht :roll:
Py-Prog hat geschrieben: Die Datei enthält einen Pfad!!!
Tja, sagst Du! Evtl. irrst Du Dich?
Py-Prog hat geschrieben: Ip ist Interpreter
Schreib doch bitte einfach "Python" stattdessen - dann ist es klar, was Du meinst.

Was ist mit meinen anderen Fragen / Anmerkungen?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

*plonk*
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

@py-prog:; Also entschuldige mal, aber so einen Ton hab ich nu schon lange in keinem Forum mehr gelesen! Ich kenne Foren, da wird man für so ne Ansagen gekickt.

Ist dir klar, dass die Jungs / Mädls die dir hier helfen wollen, das freiwillig tun? Es muss dir hier keiner Antworten. Wenn du weiterhin so nen Ton anschlägst, wird dir wahrscheinlich auch bald niemand mehr ne Antwort geben.

Also, cool bleiben und versuchen, das Problem möglichst klar darzulegen ;-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich bin mal lieb und zeige eine Variante, die das `ConfigParser`-Modul nutzt, um einen Parameter persistent abzufragen und ggf. zu speichern, sofern er noch nicht existierte. Finde ich persönlich schöner als die Bastelei mit `file.read`.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Boa alta is doch nicht so schwer, kapiers halt, wenn du einmal aus der Datei gelesen hast, must du halt erstmal wieder zum anfang gehen, is das so schwer, boa?
the more they change the more they stay the same
deets

Py-Prog hat geschrieben:Wer python kann könnte auch heraus lesenwas die Datei genau enthält, hab ich auch gesagt.
*Pruuust* Du redest hier von Python koennen, obwohl du an trivialsten Problemen wie dem hier scheiterst? Merkbefreit & froh dabei...
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Hyperion hat geschrieben:
Py-Prog hat geschrieben:Wer python kann könnte auch heraus lesenwas die Datei genau enthält, hab ich auch gesagt.
Nur weil man Python "kann", wissen wir doch noch nicht, was genau in Deiner Datei drin steht :roll:
Py-Prog hat geschrieben: Die Datei enthält einen Pfad!!!
Tja, sagst Du! Evtl. irrst Du Dich?
Py-Prog hat geschrieben: Ip ist Interpreter
Schreib doch bitte einfach "Python" stattdessen - dann ist es klar, was Du meinst.

Was ist mit meinen anderen Fragen / Anmerkungen?
Ok, ich hab den Fehler gefunden, (wie in den Meisten fällen etwa 40 cm form Bildschirm :oops: )
Erst wird die Datei fertig gelesen, und dann noch mal, aber den Pfad '' gibt es ja nicht.
Und weil bei den print ausgaben so aussah als ob Python den richtigen Pfad nehmen würde,
dachte ich es liegt nicht an den was ihr sagt und hab gedacht das muss an was anderen liegen.
Entschuldigt den Ton, und Danke für die Hilfe.


mcdaniels hat geschrieben:@py-prog:; Also entschuldige mal, aber so einen Ton hab ich nu schon lange in keinem Forum mehr gelesen! Ich kenne Foren, da wird man für so ne Ansagen gekickt.

Ist dir klar, dass die Jungs / Mädls die dir hier helfen wollen, das freiwillig tun? Es muss dir hier keiner Antworten. Wenn du weiterhin so nen Ton anschlägst, wird dir wahrscheinlich auch bald niemand mehr ne Antwort geben.

Also, cool bleiben und versuchen, das Problem möglichst klar darzulegen ;-)
Ja, mir ist bewusst das die Jungs / Mädels hir das freiwillig tun. Mir ist auch bewusst das sie mir nicht helfen müssen, aber sie tun es, auch wenn ich es eigentlich nicht mehr verdient hätte.
Aber mir ist nicht bewusst warum jedes mal sich alle beschweren das sie etwas nicht verstehen, und nie sagt mal jemand was er genau nicht versteht.

Wenn jemand neu ins forum kommt und einen Fehler im Programm hat dann heißt es als erstes: Code und Traceback, aber ich kriege diesen "Traceback" nicht und kann den Fehler nicht finden und beheben. Währe echt mal nett diesen "Traceback" zu bekommen.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Py-Prog hat geschrieben: Erst wird die Datei fertig gelesen, und dann noch mal, aber den Pfad '' gibt es ja nicht.
Und weil bei den print ausgaben so aussah als ob Python den richtigen Pfad nehmen würde,
dachte ich es liegt nicht an den was ihr sagt und hab gedacht das muss an was anderen liegen.
Genau das hatte Dir /me bereits im ersten Antwortposting beschrieben ;-) Dein Problem ist, dass Du nicht genau liest und über die Antworten nicht lange / konzentriert genug nachdenkst. Denn ich wette, dass Du sein Posting jetzt verstehst, wenn Du es nun noch mal liest ;-)
Py-Prog hat geschrieben: Aber mir ist nicht bewusst warum jedes mal sich alle beschweren das sie etwas nicht verstehen, und nie sagt mal jemand was er genau nicht versteht.
Es haben doch genügend Leute Dinge nachgefragt. Oftmals macht es keinen Sinn zu erläutern, wieso man bestimmte Dinge von Dir wissen will. Z.B. als ich nach der Datei fragte. Ich habe eben vermutet, dass der Pfad da drin nicht stimmt bzw. eben ungültig ist. Da ich nur vermutet habe, ist es nicht immer sinnvoll, die Vermutung im Vorfeld darzulegen... was ich iirc sogar dennoch getan habe.
Py-Prog hat geschrieben: Wenn jemand neu ins forum kommt und einen Fehler im Programm hat dann heißt es als erstes: Code und Traceback, aber ich kriege diesen "Traceback" nicht und kann den Fehler nicht finden und beheben. Währe echt mal nett diesen "Traceback" zu bekommen.
Was meinst Du damit, dass Du den Traceback nicht bekommst? Weißt Du denn, was damit gemeint ist?

Du bist übrigens immer noch nicht auf meine Fragen und Anmerkungen eingegangen ;-) Das ist auch nicht gerade motivierend für den "Helfer".
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Hyperion hat geschrieben:
Py-Prog hat geschrieben: Erst wird die Datei fertig gelesen, und dann noch mal, aber den Pfad '' gibt es ja nicht.
Und weil bei den print ausgaben so aussah als ob Python den richtigen Pfad nehmen würde,
dachte ich es liegt nicht an den was ihr sagt und hab gedacht das muss an was anderen liegen.
Genau das hatte Dir /me bereits im ersten Antwortposting beschrieben ;-) Dein Problem ist, dass Du nicht genau liest und über die Antworten nicht lange / konzentriert genug nachdenkst. Denn ich wette, dass Du sein Posting jetzt verstehst, wenn Du es nun noch mal liest ;-)
Ja, ich versteh jetzt alles.
Hyperion hat geschrieben:
Py-Prog hat geschrieben: Aber mir ist nicht bewusst warum jedes mal sich alle beschweren das sie etwas nicht verstehen, und nie sagt mal jemand was er genau nicht versteht.
Es haben doch genügend Leute Dinge nachgefragt. Oftmals macht es keinen Sinn zu erläutern, wieso man bestimmte Dinge von Dir wissen will. Z.B. als ich nach der Datei fragte. Ich habe eben vermutet, dass der Pfad da drin nicht stimmt bzw. eben ungültig ist. Da ich nur vermutet habe, ist es nicht immer sinnvoll, die Vermutung im Vorfeld darzulegen... was ich iirc sogar dennoch getan habe.
Dieses
/me hat geschrieben:Deine Beschreibung ist wie gewohnt relativ unverständlich.
ist aber auch
relativ unverständlich.
Hyperion hat geschrieben:
Py-Prog hat geschrieben: Wenn jemand neu ins forum kommt und einen Fehler im Programm hat dann heißt es als erstes: Code und Traceback, aber ich kriege diesen "Traceback" nicht und kann den Fehler nicht finden und beheben. Währe echt mal nett diesen "Traceback" zu bekommen.
Was meinst Du damit, dass Du den Traceback nicht bekommst? Weißt Du denn, was damit gemeint ist?
Ich weiß immer noch nicht welchen teil meine Problem Beschreibung noch nicht klar ist.
Hyperion hat geschrieben: Du bist übrigens immer noch nicht auf meine Fragen und Anmerkungen eingegangen ;-) Das ist auch nicht gerade motivierend für den "Helfer".
Wo zu auch? Jetzt ist es doch eh gelöst, und ich kann nicht 24/7 im Forum sein, bzw nicht jeden eine Antwort schreiben.
(auf diesen Thread bezogen)
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Py-Prog hat geschrieben: Ich weiß immer noch nicht welchen teil meine Problem Beschreibung noch nicht klar ist.
Was hat das mit dem "Traceback" zu tun? Also Dein komplettes Posting von gerade ist ein Musterbeispiel für Verworrenheit. Du zitierst Dinge, die keine Zitate sind und deine Kommentare unterhalb von Zitaten lassen keinen Zusammenhang zu diesen erkennen.
Py-Prog hat geschrieben: Wo zu auch? Jetzt ist es doch eh gelöst, und ich kann nicht 24/7 im Forum sein, bzw nicht jeden eine Antwort schreiben.
(auf diesen Thread bezogen)
Nun ja, zum einen mag es eine bessere Lösung geben als Deine (z.B. eben durch die Verwendung von Standardformaten), zum regte ich unabhängig davon ja an, dass Du die Verarbeitung des Lesens und Speicherns in separate Funktionen auslagern solltest. Dies hätte Deinen Fehler von vornherein nicht auftreten lassen ;-)

Im übrigen musst Du hier nicht permanent anwesend sein; sobald Du aber in einem Thread weiter schreibst, gehört es sich imho schon, auf Fragen oder Anmerkungen von Vorpostern einzugehen, die in der Zwischenzeit aufgelaufen sind. Und die Zeit zu diesen Meta-Postings hast Du Dir ja nun auch genommen... :roll:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Hyperion hat geschrieben:Nun ja, zum einen mag es eine bessere Lösung geben als Deine (z.B. eben durch die Verwendung von Standardformaten), zum regte ich unabhängig davon ja an, dass Du die Verarbeitung des Lesens und Speicherns in separate Funktionen auslagern solltest. Dies hätte Deinen Fehler von vornherein nicht auftreten lassen ;-)
Aber diese Funktion muss auch code enthalten!
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Py-Prog hat geschrieben: Aber diese Funktion muss auch code enthalten!
Jaha! Aber wenn Du eine Funktion dieser Art hast,

Code: Alles auswählen

def load(filename):
    # laden, parsen usw.
    return value

#irgend wo in einer anderen Funktion:
    value = load("foo.txt")
    print value
    do_something(value)
dann kannst Du `value` ausgeben und benutzen, so oft Du willst. Eben weil Du nicht doppelt aus der Datei lädst. Genau das war doch Dein Fehler :!:

Zudem ist das Debuggen recht einfach, weil Du anstelle von `value = load("foo.txt")` den Code zum Testen schnell mal ändern kannst:

Code: Alles auswählen

#irgend wo in einer anderen Funktion:
    #value = load("foo.txt")
    value = "/path/to/somewhere"
    print value
    do_something(value)
Du fügst hier eben schnell mal einen fixen Wert zum Testen ein. Sofern es damit dann auch nicht klappt, liegt der Fehler wohl an der `do_something`-Funktion. Klappt es damit, geht wohl etwas in der `load`-Funktion schief, oder der Wert in der Datei ist korrupt / ungültig.

Modularisieren ist das A und O im Leben eines Programmierers.

Da Du das nicht getan hast, gab es von mir diesen Hinweis. Außerdem schau Dir doch mal mein Beispiel mit Benutzung des `ConfigParser`-Moduls an. Letztlich mache ich das da genauso wie hier geschildert.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten