2017-06-22 3 views
1

ich meine Python-Code in dieser Struktur haben:Python-Pfad nicht Textdatei finden

folder: 
    Procfile 
    folder2: 
     myprog.py 
     foo.py 
     somefile.txt 

Mein Procfile enthält web: python folder2/myprog.py

myprog.py enthält:

import sys 
sys.path.insert(0, '../') 
#other code 

foo.py enthält:

print "about to read file" 
file = open("somefile.txt", "r") 
print file.read() 
print "done reading" 

Ich kann die Datei nicht lesen. Der Code erreichte nie done reading Teil obwohl er druckt about to read file

+0

Gibt es einen Fehler? Der 'sys.path.insert ('..')' ist ein Trick, um Modulpfad-Suchen ('import xyz')' hinzuzufügen, nicht um normale Dateien zu öffnen. – Anthon

+0

Nachdem ich es mit 'try/catch' umgeben habe, bekomme ich den Fehler' I/O error (2): Keine solche Datei oder kein Verzeichnis' – Anthony

+0

Ich glaube nicht, dass es versucht, die Datei zu öffnen, wo Sie es zu öffnen versucht. Probieren Sie 'print os.getcwd()' aus (und stellen Sie sicher, dass Sie eine Zeile 'import os' haben), um zu sehen, in welchem ​​Verzeichnis Sie sich befinden. Meine Vermutung ist, dass Sie 'file = öffnen müssen (" folder2/somefile.txt ")' – Anthon

Antwort

2

Sie Vorteil der automatischen Modulvariable __file__ und die Tatsache nehmen, dass Sie wissen somefile.txt im selben Verzeichnis wie foo.py ist:

file = open(os.path.join(os.path.dirname(__file__), "somefile.txt"), "r") 

sys.path bestimmt nur die Suchpfad für den Import von Modulen, nicht wo generische Dateien vom Dateisystem geöffnet werden.

+0

Eine andere leichte Variante wäre 'file = open (os.path.join (os.getcwd(), 'folder2', 'somefile .txt '),' r ') '. 'os.getcwd()' gibt das aktuelle Arbeitsverzeichnis zurück, das auf Cloud Foundry das Stammverzeichnis Ihres Projekts ist (es sei denn, Sie würden dies in Ihrer Procfile-Datei explizit ändern). –

Verwandte Themen