2017-06-22 34 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中專門改變這個目錄)。 –