Datei öffnen - Python 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
Benutzeravatar
robocode
User
Beiträge: 16
Registriert: Sonntag 8. Februar 2015, 23:52

Hey, ich beschäftige mich gerade mit dem Öffnen/Schreiben von Dateien. Eigentlich kein Problem, Python bringt mir nur immer eine Fehlermeldung dass er die Datei nicht findet. Hab schon rumgesucht und nichts gefunden. Meine .py Datei liegt auf dem Desktop, die Datei Test.txt ebenfalls. Ich nutze folgenden Code:

Code: Alles auswählen

import os

fobj = open("Test.txt", "r")

for lesen in fobj.readlines():
    print lesen
    

fobj.close()
Traceback (most recent call last):
File "C:\Users\Manu\Desktop\manu.py", line 3, in <module>
fobj = open("Test.txt", "r")
IOError: [Errno 2] No such file or directory: 'Test.txt'

Weiß jemand woran das liegen könnte?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

*Wie* (und damit *wo*) startest Du denn Dein Python Script? Du musst das Programm schon aus dem Verzeichnis starten, in dem die Textdatei liegt! Also am besten in einer Shell dort hin navigieren und dann das Programm starten.

Dateien solltest Du übrigens immer mittels ``with`` öffnen:

Code: Alles auswählen

with open("test.txt") as f:
    for line in f:
        print line
``with`` stellt in dem Fall sicher, dass die Datei auch beim Auftreten einer Exception geschlossen wird.

Der Import von ``os`` ist übirgens überflüssig und über Fileobjekten kann man *direkt* iterieren :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
robocode
User
Beiträge: 16
Registriert: Sonntag 8. Februar 2015, 23:52

Vielen Dank, habs hinbekommen!

Und danke für den Tipp mit "with open...."
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Noch ein Tipp: Guck mal öfter hier ins Forum und überfliege mal die neuen Beiträge eines Tages. Gerade bei Anfängerfragen gibt es nützliche Hinweise dieser Art meist täglich :-) Da kannst Du also auch etwas als stiller Leser lernen, ohne, dass es eine Frage von Dir wäre.

Habe ich anfänglich auch viel gemacht :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@robocode: `lesen` ist ein eigenartiger Name für eine Zeile aus einer Datei. Und der `readlines()`-Aufruf ist überflüssig. Man kann direkt über ein Dateiobjekt iterieren und bekommt dabei die Zeilen. Mit dem Vorteil das die Zeilen der Datei vorher nicht komplett in eine Liste in den Speicher eingelesen werden, sondern nur bei Bedarf.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Man kann auch dynamisch arbeiten. Dabei verwendet man den Umstand, dass die Variable __file__ den Pfad zur aktuellen Datei enthält. Mit os.path.dirname lässt sich daraus der Pfadanteil extrahieren. Jetzt muss man an diesen nur noch den Namen der Datei anhängen. Pfade verkettet man mit os.path.join. Das ist handlicher und flexibler als die einzelnen Bestandteile mit Stringoperationen zu verbinden.

Code: Alles auswählen

import os

filename = 'test.txt'
path = os.path.dirname(__file__)
path_to_file = os.path.join(path, filename)

# oder am Stück
path_to_file = os.path.join(os.path.dirname(__file__), filename)
Sollte die Datei unterhalb des Programmverzeichnisses in einem Ordner namens data liegen, dann lässt sich das ganz einfach anpassen.

Code: Alles auswählen

path_to_file = os.path.join(os.path.dirname(__file__), 'data', filename)
Antworten