2017-06-22 32 views
1

我在这个结构我的Python代码:Python的路径没有找到文本文件

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

Procfile包含web: python folder2/myprog.py

myprog.py包含:

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

foo.py包含:

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

我无法读取文件。该代码从未达到done reading部分尽管它已经打印about to read file

+0

它会抛出一个错误吗? 'sys.path.insert('..')'是添加模块路径搜索('import xyz')'的一个技巧,而不是用于打开普通文件。 – Anthon

+0

用'try/catch'围绕它后,我得到这个错误'I/O错误(2):没有这样的文件或目录' – Anthony

+0

我不认为它试图打开文件,你认为它试图打开它。在这之前尝试'print os.getcwd()'(并确保你有一行'import os')来查看你的目录。我的猜测是你需要做'file = open(“folder2/somefile.txt”)' – Anthon

回答

2

您可以乘坐自动模块变量__file__和事实的优点是,你知道somefile.txt是在同一个目录中foo.py

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

sys.path只决定用于导入模块的搜索路径,而不是从文件系统打开通用文件的位置。

+0

另一个细微的变化是'file = open(os.path.join(os.getcwd(),'folder2','somefile .txt'),'r')'。 'os.getcwd()'返回当前的工作目录,这个目录在Cloud Foundry上将成为你项目的根目录(除非你在Procfile中专门改变这个目录)。 –