2012-04-13 102 views
0

所以我有這樣無法找到文本文件

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

目錄struture所以我裏面執行目錄,並已包括以下路徑以我的Python路徑。

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

algorithm.py有代碼讀取data.txt中

所以,當我運行execute.py,execute.py調用algorithm.py這反過來讀的data.txt 我認爲上面的行應該完成這項工作。它能夠找到algorithm.py而不是data.txt?

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

任何線索我在做什麼錯? 感謝

回答

2

您在algorithm.py閱讀data.txt這樣的:

open('data.txt') 

因爲那是相對於相對scripts目錄中工作目錄不能及的。

algorithm.py你可以試試這個:

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

是的。我在做f = open(filename,'r')什麼是正確的方式來閱讀這個文件? – Fraz 2012-04-13 07:51:14

+0

真棒,非常感謝:) – Fraz 2012-04-13 07:53:41

2

這通常是相對文件名不是相對於你希望哪裏的問題。打印os.path.abspath(filename)的內容進行檢查。如果它給你一些奇怪的東西,首先指定絕對路徑(當你初始化filename時)應該修復它。

+1

+1這是非常好的建議,因爲它教會OP如何在下一次出現時解決這個問題,以及如何解決類似的問題。 – 2012-04-13 07:55:04

1

sys.path用於在使用import時告訴Python在哪裏查找模塊。它不影響用open查找文件。打開文件時,相對路徑與「當前工作目錄」相關,您可以使用os.getcwd進行檢查,並使用os.chdir更改。

紅利:如果您在啓動時檢查sys.path的值,您會看到它包含''。這告訴Python也檢查模塊的當前工作目錄(以及sys.path中的硬編碼絕對路徑,這就是爲什麼,如果在「in」(使用命令提示符)時啓動Python解釋器,則包含您的文件夾模塊,你不必告訴它在哪裏尋找你的模塊。