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

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: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Corny
User
Beiträge: 15
Registriert: Dienstag 11. Januar 2005, 10:48
Wohnort: München

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Corny
User
Beiträge: 15
Registriert: Dienstag 11. Januar 2005, 10:48
Wohnort: München

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

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

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

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

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

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 (former) Modvoice
Antworten