Datei wird nicht gefunden, obwohl sie im selben Verzeichnis liegt (Errno 2)

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
Rosinenschnitzel
User
Beiträge: 3
Registriert: Samstag 15. Oktober 2016, 14:10

Hallo,
ich habe das Problem, dass Skripte bei mir seit dem Neuaufsetzen meines Systems Dateien nicht mehr finden, obwohl diese im selben Verzeichnis liegen. Wenn ich hingegen den gesamten Pfad in np.loadtxt hineinschreibe, funktioniert es. Ich habe momentan Python 2.7.6 und Python 3.4.0 beide installiert, aber soweit ich mich erkundigt habe, sollte das ja eigentlich keine Probleme machen. Übrigens habe ich als System Linux Mint 17.3, was auf Ubuntu 14.04 basiert. Vielleicht hilft euch das dabei mir zu helfen :)
Versteht ihr, was da los ist? Ich bin einigermaßen ratlos. So sieht dann beispielsweise die ganze Fehlermeldung aus:

Code: Alles auswählen

python '/home/timo/Programme/kafe-master/examples/example1_model_comparison/example1_model_comparison.py' 
Traceback (most recent call last):
  File "/home/timo/Programme/kafe-master/examples/example1_model_comparison/example1_model_comparison.py", line 57, in <module>
    my_dataset.read_from_file('dataset.dat')
  File "/usr/local/lib/python2.7/dist-packages/kafe/dataset.py", line 1213, in read_from_file
    tmp_file = open(input_file, 'r')
IOError: [Errno 2] No such file or directory: 'dataset.dat'
Ich hoffe ihr könnt mir da weiterhelfen.
Liebe Grüße,
Rosinenschnitzel
BlackJack

@Rosinenschnitzel: Relative Pfadangaben werden relativ zum aktuellen Arbeitsverzeichnis gesucht. Wo das Programm liegt welches die Datei öffnen soll ist dabei egal.
Rosinenschnitzel
User
Beiträge: 3
Registriert: Samstag 15. Oktober 2016, 14:10

Ach so stimmt, ich muss erst mit der Konsole in das Verzeichnis wechseln, und dann funktioniert das nur mit dem Namen. Ich bin eigentlich Idle gewohnt, da funktioniert das immer :)
Na gut, das macht es zwar ein wenig komplizierter, aber da kann man dann nichts machen.
Danke für deine Hilfe :)
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Rosinenschnitzel: es gibt das aktuelle Verzeichnis, das nichts mit dem Verzeichnis zu tun hat, in dem Dein Skript liegt. Dass das mal zufällig das selbe war, garantiert ja nicht, dass das immer das selbe ist. Hat auch nichts mit Python2 oder 3 zu tun, sondern ist eine Sache des Betriebssystems, also jedes Programm verhält sich da gleich.
Du mußt also Dein Skript aus dem richtigen Verzeichnis aus aufrufen:
[codebox=bash file=Unbenannt.bsh]
cd /home/timo/Programme/kafe-master/examples/example1_model_comparison
python example1_model_comparison.py
[/code]
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Mit `os.path.split(os.path.abspath(__file__)[0])` kommst du übrigens an den Pfad des Skripts, damit kannst du Pfade relativ zum Skriptverzeichnis machen `os.path.join(os.path.split(os.path.abspath(__file__)[0]), 'dataset.dat')`, ob man das will ist aber fraglich,
the more they change the more they stay the same
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Dav1d: die Klammer geht zu spät zu, korrekt wäre os.path.split(os.path.abspath(__file__))[0]. Besser direkt statt split os.path.dirname(os.path.abspath(__file__)), man kann da aber auch nur mit relativen Pfaden arbeiten (solange man das Arbeitsverzeichnis nicht ändert, was man ja sowieso nie tun sollte):

Code: Alles auswählen

scriptpath = os.path.dirname(__file__)
filename = os.path.join(scriptpath, "dataset.dat")
Rosinenschnitzel
User
Beiträge: 3
Registriert: Samstag 15. Oktober 2016, 14:10

Hey,
vielen Dank für die Antworten. Dann kann ich ja auch mal schauen, wie es mit den relativen Pfadangaben so ist. Aber erstmal bin ich froh, dass das Ganze kein Fehler ist :)
Danke und liebe Grüße,
Rosinenschnitzel
Antworten