2012-04-13 10 views
0

So zu lokalisieren habe ich das Verzeichnis struture wie diesenicht in der Lage, die Textdatei

Execute_directory--> execute.py 
    | 
    Algorithm ---> algorithm.py 
      | 
      |--> data.txt 

Also ich innerhalb Verzeichnis ausführen bin und habe den folgenden Pfad zu meinem Python-Pfad enthalten.

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../Algorithm") 

algorithm.py hat einen Code data.txt

Also, wenn ich execute.py laufen, execute.py ruft algorithm.py, die abwechselnd gelesen data.txt Ich dachte, dass über die Linie zu lesen hätte den Job machen sollen. es ist in der Lage, algorithm.py, aber nicht data.txt zu finden ??

  IOError: [Errno 2] No such file or directory:'data.txt' 

Jede Ahnung, was ich falsch mache ?? Dank

Antwort

2

Sind Sie data.txt in algorithm.py wie folgt zu lesen:

open('data.txt') 

Weil das mit dem Arbeitsverzeichnis und nicht in Bezug auf das Skriptverzeichnis relativ.

In algorithm.py könnten Sie dies versuchen:

open(os.path.join(os.path.dirname(__file__), 'data.txt')) 
+0

ja ich mache f = offen (Dateiname, 'r') Was ist der richtige Weg, um diese Datei zu lesen? – Fraz

+0

genial, vielen Dank :) – Fraz

2

Dies würde in der Regel ein Problem mit relativen Dateinamen nicht zu sein in Bezug auf, wo Sie erwarten. Drucken Sie den Inhalt von os.path.abspath(filename), um dies zu überprüfen. Wenn es Ihnen etwas seltsames gibt, sollte der absolute Pfad an erster Stelle (wenn Sie filename initialisieren) behoben werden.

+1

+1 das ist ein exzellenter Ratschlag, da es OP lehrt, wie man dieses Problem beim nächsten Mal lösen kann, wenn es auftaucht, sowie Hinweise darauf, wie man ähnliche Probleme lösen kann. –

1

sys.path wird verwendet, um Python zu sagen, wo nach Modulen zu suchen, wenn Sie import verwenden. Es hat keinen Einfluss auf die Suche nach Dateien mit open. Wenn Sie eine Datei öffnen, sind relative Pfade relativ zum "aktuellen Arbeitsverzeichnis", das Sie mit os.getcwd überprüfen und mit os.chdir ändern können.

Bonus: Wenn Sie den Wert von sys.path beim Start überprüfen, werden Sie sehen, dass es '' enthält. Dies veranlasst Python, auch das aktuelle Arbeitsverzeichnis für Module zu überprüfen (sowie die hartkodierten absoluten Pfade in sys.path), weshalb, wenn Sie einen Python-Interpreter während "in" starten (mit einer Eingabeaufforderung) der Ordner, der Ihre enthält Modul, Sie müssen es nicht sagen, wo Sie nach Ihrem Modul suchen müssen