2017-06-22 9 views
1

J'ai mon code python dans cette structure:chemin Python ne pas trouver un fichier texte

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

Mon Procfile contient web: python folder2/myprog.py

myprog.py contient:

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

foo.py contient:

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

Je n'arrive pas à lire le fichier. Le code n'a jamais atteint done reading partie eventhough il imprime about to read file

+0

Lance-t-il une erreur? Le 'sys.path.insert ('..')' est un truc pour ajouter des recherches de chemin de module ('import xyz')', pas pour ouvrir des fichiers normaux. – Anthon

+0

Après l'avoir entouré de 'try/catch', j'ai obtenu cette erreur' I/O error (2): Pas de fichier ou de répertoire ' – Anthony

+0

Je ne pense pas qu'il essaie d'ouvrir le fichier où vous pensez qu'il essaie de l'ouvrir. essayez 'print os.getcwd()' (et assurez-vous d'avoir une ligne 'import os') avant cela) pour voir dans quel répertoire vous êtes. Je suppose que vous devez faire 'file = open (" folder2/somefile.txt ")' – Anthon

Répondre

2

Vous pouvez profiter de la variable du module automatique __file__ et le fait que vous savez somefile.txt est dans le même répertoire que foo.py:

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

sys.path détermine que la chemin de recherche pour importer des modules, pas où les fichiers génériques seront ouverts à partir du système de fichiers.

+0

Une autre légère variante serait 'file = open (os.path.join (os.getcwd(), 'folder2', 'quelquechose .txt '),' r ') '. 'os.getcwd()' retourne le répertoire de travail courant sur Cloud Foundry qui sera la racine de votre projet (sauf si vous deviez le modifier spécifiquement dans votre fichier Procfile). –