Seite 1 von 1

Peinliche Frage: aus Datei lesen

Verfasst: Mittwoch 8. Juni 2005, 09:01
von Corny
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?

Re: Peinliche Frage: aus Datei lesen

Verfasst: Mittwoch 8. Juni 2005, 09:23
von gerold
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
:-)

Re: Peinliche Frage: aus Datei lesen

Verfasst: Mittwoch 8. Juni 2005, 09:24
von jens
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...

Verfasst: Mittwoch 8. Juni 2005, 09:35
von Corny
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?

Verfasst: Mittwoch 8. Juni 2005, 09:38
von jens
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()

Verfasst: Mittwoch 8. Juni 2005, 09:45
von Corny
Danke für die schnelle Hilfe!

...aber ich muss zugeben auf die Idee wäre ich selbst wohl nicht gekommen :oops: :roll:

Verfasst: Mittwoch 8. Juni 2005, 11:55
von querdenker
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

Verfasst: Mittwoch 8. Juni 2005, 12:01
von jens
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.

Verfasst: Mittwoch 8. Juni 2005, 12:30
von querdenker
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

Verfasst: Mittwoch 8. Juni 2005, 20:41
von BlackJack
Ein explizites `flush()` vor einem `close()` ist nicht notwendig! Da muss ein anderer Fehler vorgelegen haben.

Verfasst: Mittwoch 8. Juni 2005, 21:26
von Leonidas
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.