Seite 1 von 1

Kann keine Dateien schreiben

Verfasst: Donnerstag 26. August 2010, 12:29
von gtuk
Hallo liebe Leute..

Ich machs kurz: ich bin offensichtlich zu blöde, ein "Programm" zu schreiben, dass als Ergebnis eine Datei mit Inhalt liefert.
Ein einfaches Beispiel:

f = open ('test.txt', 'w')
f.write('das ist nur ein test')
f=open('test.txt', 'r')
f.read()
f.close()

wenn ich diese anweisungen als einfaches programm schreibe, passiert rein gar nichts. auch keine fehlermeldung.
wenn ich diese befehle jedoch einzeln in der shell eingebe, geschieht das gewünschte.
kann mir mal einer sagen, was das für nen unterschied macht? Ich fühl mich so langsam echt in einer Sackgasse..
achso: ich nutze python 2.6.5, falls das relevant ist.

und wo ich gerade hier rein schreibe: Wie bekomme ich denn den Ort heraus, an dem diese geschriebenen, neu erstellten Dateien gespeichert werden?

danke schonmal für die geistige erleuchtung.

Re: Kann keine Dateien schreiben

Verfasst: Donnerstag 26. August 2010, 12:34
von cofi
Du solltest dateien eben schliessen, wenn du fertig bist. Und den Rueckgabewert von `f.read()` benutzen.

Oder noch besser `with` verwenden

Code: Alles auswählen

with open("test.txt", "w") as f:
    f.write("das ist nur ein test")
with open("test.txt", "r") as f:
    print f.read()

Re: Kann keine Dateien schreiben

Verfasst: Donnerstag 26. August 2010, 12:42
von gtuk
ok. ich verstehs zwar nicht, aber es funktioniert bestens. und das ist vorerst mein anliegen.
ich danke dir!

Re: Kann keine Dateien schreiben

Verfasst: Donnerstag 26. August 2010, 12:49
von cofi
Es ist nunmal so, dass es keine Garantie gibt, dass die Dateien "geschrieben" werden, bevor der entsprechende Filehandle geschlossen wird. Dein Problem duerfte aber eher gewesen sein, dass du `f.read()` falsch benutzt hast.

Re: Kann keine Dateien schreiben

Verfasst: Donnerstag 26. August 2010, 13:00
von /me
gtuk hat geschrieben:ok. ich verstehs zwar nicht, aber es funktioniert bestens.
1. Dateien müssen nach der Bearbeitung geschlossen werden. In deinem Code fehlte das close() nach dem Schreiben.
2. Das Verständnis des with-Statement ist für einen Anfänger tatsächlich nicht ganz einfach. Ich beschränke mich daher hier auf die Verwendung im Kontext von open(), die du im Beispiel von cofi findest. Wenn der eingerückte zum with-Statement gehörende Block verlassen wird, dann wird die Datei automatisch geschlossen. Das von mir in Punkt 1 erwähnte explizite close() ist damit nicht mehr erforderlich.