2016-05-25 5 views
-1

Ich verwende with open('myFile', 'rb') as file:, um eine Datei zu lesen. Beim Ausführen des Programms mit funktioniert alles gut. Aber sobald ich versuche es ohne cd zu laufen -ing in das Verzeichnis von myProgram.py und verwenden Sie einen absoluten Pfad stattdessen (wie python /home/myName/myCode/myProgram.py bekomme ich immer diese Fehlermeldung:. FileNotFoundError: [Errno 2] No such file or directoryPython FileNotFoundError bei Verwendung von open()

Warum also open() verhalten sich unterschiedlich, je nachdem, wie der Python Programm gestartet? Und ist es eine Möglichkeit, die Dinge funktionieren, selbst wenn mit einem absoluten Pfad zu beginnen?

ich habe bereits versucht open('/home/myName/myCode/myfile', 'rb') aber ohne Erfolg ...

+0

Sind Sie sicher, dass die Datei dort ist, wo Sie sie finden? –

+1

Führen Sie "pwd" in dem Verzeichnis aus, in dem Sie das Programm ausführen können. Ergebnisse posten – WildCard

+0

sollten Sie auch Ihre vollständige Traceback geben – WildCard

Antwort

1

warum also offen ist() verhalten unterschiedlich je nachdem wie der Python-Programm gestartet? Und gibt es eine Möglichkeit, Dinge zum Laufen zu bringen, auch wenn man mit einem absoluten Pfad beginnt?

Weil das Standardverhalten ist. Nicht nur für Python, sondern für alle Anwendungen (zumindest alles, was ich weiß). Ein relativer Pfad (wie 'Myfile') wird im aktuellen Verzeichnis angenommen. Dieser Pfad ändert sich je nachdem, in welchem ​​Verzeichnis Sie sich befinden, wenn Sie das Skript von einer Shell aus starten. Wenn Sie keinen absoluten Pfad angeben, wie würde Python dann wissen, welche Datei in einer solchen Verzeichnisstruktur verwendet werden soll?

root 
|-- dir1 
| `-- myFile 
`-- dir2 
    `-- myFile 

Sie waren auf dem richtigen Weg mit open('/home/myName/myCode/myfile', 'rb').

+0

Danke, das macht durchaus Sinn. Ich habe es noch einmal mit 'open ('/ home/myName/myCode/myfile', 'rb') versucht und jetzt funktioniert es! – lysigk

0

Angenommen, Sie führen pwd und es gibt /home/myName zurück. Wenn Sie dann /home/myName/code/myProgram.py ausführen, ist das Arbeitsverzeichnis Ihres Programms nicht/home/myName/code; es ist /home/myName. Das Arbeitsverzeichnis eines Prozesses, das vom übergeordneten Prozess geerbt wurde. Es wurde nicht basierend auf dem Speicherort des Skripts festgelegt.

Verwandte Themen