Peinliche Frage: aus Datei lesen

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.
Benutzeravatar
Corny
User
Beiträge: 15
Registriert: Dienstag 11. Januar 2005, 10:48
Wohnort: München

Peinliche Frage: aus Datei lesen

Beitragvon Corny » Mittwoch 8. Juni 2005, 09:01

Guten Morgen,

...aber erst einmal ein dickes Danke ans Forum: Ihr habt mir hier schon so super weitergeholfen, einfach klasse! Und hier geht es wenigstens nicht so "hochnäsig" wie in anderen (vor allem C-) Forum zu. Weiter so! :)

Jetzt aber zu meiner Frage, die mir langsam wirklich peinlich ist. Es sollte doch eigentlich kein Thema sein was aus einer simplen Datei auszulesen?! Aber ich bekomme es nicht auf die Reihe.

Ich erstelle eine Datei und schreibe z.B. die Zahl 32 rein. Wie kann ich diese Zahl nun wieder auslesen? f.readline ergibt nur Mist, genauso f.read - die Datei wurde aber korrekt angelegt und der Eintrag ist auch vorhanden.

Kann mir da bitte jemand weiterhelfen?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Peinliche Frage: aus Datei lesen

Beitragvon gerold » Mittwoch 8. Juni 2005, 09:23

Corny hat geschrieben: Ich erstelle eine Datei und schreibe z.B. die Zahl 32 rein. Wie kann ich diese Zahl nun wieder auslesen? f.readline ergibt nur Mist, genauso f.read - die Datei wurde aber korrekt angelegt und der Eintrag ist auch vorhanden.

Hi Corny!
Wir nähern uns der Glaskugel... Etwas Code wäre nicht schlecht gewesen.

Falls du die Datei sofort nach dem Schreiben lesen möchtest (Mode 'r+', 'w+' oder 'a+') und das File-Objekt noch nicht geschlossen hast, dann musst du dich vor dem Lesen wieder zur Position der Zahl bewegen. (mit seek)

Hast du die Datei nur zum Schreiben, nur zum Lesen oder beides geöffnet? Wie sieht der Mist aus, den zu zurück bekommst?

Allgemeine Hilfe zu Dateioperationen findest du hier:
http://docs.python.org/lib/bltin-file-objects.html
http://docs.python.org/lib/built-in-fun ... t-in-funcs --> file

lg
Gerold
:-)
Zuletzt geändert von gerold am Mittwoch 8. Juni 2005, 09:25, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Re: Peinliche Frage: aus Datei lesen

Beitragvon jens » Mittwoch 8. Juni 2005, 09:24

Corny hat geschrieben:Ich erstelle eine Datei und schreibe z.B. die Zahl 32 rein. Wie kann ich diese Zahl nun wieder auslesen? f.readline ergibt nur Mist, genauso f.read - die Datei wurde aber korrekt angelegt und der Eintrag ist auch vorhanden.


In wiefern spuckt es nur Mist aus??? Ich kann mir vorstellen, das noch ein "\n" dranhängt...
Dir ist natürlich klar, das die Zahl erstmal ein String ist, der mit z.B. int() wieder zur Zahl gemacht werden kann...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Corny
User
Beiträge: 15
Registriert: Dienstag 11. Januar 2005, 10:48
Wohnort: München

Beitragvon Corny » Mittwoch 8. Juni 2005, 09:35

Schon klar dass ich dann erstmal einen string zurückbekommen werde, kein Problem. Aber selbst mit einer Zeichenfolge in der Datei bringt er mir nix brauchbares zurück.

Code: Alles auswählen

dat = "datei.txt"
datei = open(dat, 'w')
datei.write ("ftf")
print datei.readline()

bringt
D:\Test>test.py
x☺é


Gehe ich das völlig falsch an oder steckt der Teufel im Detail?
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 8. Juni 2005, 09:38

Zwischenzeitlich schließen und zum lesen öffnen, dann geht's:

Code: Alles auswählen

dat = "datei.txt"

datei = open(dat, 'w')
datei.write ("ftf")
datei.close()

datei = open(dat, "r" )
print datei.readline()

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Corny
User
Beiträge: 15
Registriert: Dienstag 11. Januar 2005, 10:48
Wohnort: München

Beitragvon Corny » Mittwoch 8. Juni 2005, 09:45

Danke für die schnelle Hilfe!

...aber ich muss zugeben auf die Idee wäre ich selbst wohl nicht gekommen :oops: :roll:
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Beitragvon querdenker » Mittwoch 8. Juni 2005, 11:55

btw: vor einem

Code: Alles auswählen

fh.close()
sollte ein

Code: Alles auswählen

fh.flush()
kommen, damit sichergestellt ist, das die Daten alle in die Datei geschrieben werden, bevor man den file-handle schließt.

mfg, querdenker
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 8. Juni 2005, 12:01

Bist du sicher das das nötig ist??? Ich habe das bisher nie gemacht! Ich dachte .flush() wäre nur dazu da, wenn man sicher stellen will, das zu diesem Zeitpunkt die Daten geschrieben worden sind.

IMHO wird .flush() quasi automatisch mit .close() aufgeführt.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Beitragvon querdenker » Mittwoch 8. Juni 2005, 12:30

jens hat geschrieben:Bist du sicher das das nötig ist??? ...
...IMHO wird .flush() quasi automatisch mit .close() aufgeführt.


Ich bin da schon ein paar mal auf die Klappe gefallen, insbesondere, wenn der Rechner während des Script-Laufes noch andere Sachen nebenher macht. Da fehlten dann schon mal ein paar Einträge, wie sich beim debuggen des Scriptes herausgestellt hat.

mfg, querdenker
BlackJack

Beitragvon BlackJack » Mittwoch 8. Juni 2005, 20:41

Ein explizites `flush()` vor einem `close()` ist nicht notwendig! Da muss ein anderer Fehler vorgelegen haben.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 8. Juni 2005, 21:26

BlackJack hat geschrieben:Ein explizites `flush()` vor einem `close()` ist nicht notwendig!

Hätt' mich auch gewundert, denn ich .flush()e praktisch nie und hatte keine Probleme.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]