2012-06-03 305 views
0

如何在python中刪除與路徑相關的問題?python中的絕對路徑和相對路徑問題

例如,我有一個目錄TEST內部模塊test.py

**test.py** 
import os 
file_path = os.getcwd() + '/../abc.txt' 

f = open(file_path) 
lines = f.readlines() 
f.close 

print lines 

現在,當我執行TEST目錄以外上面的程序,它給我的錯誤: -

Traceback (most recent call last): 
    File "TEST/test.py", line 4, in ? 
    f = open(file_path) 
IOError: [Errno 2] No such file or directory: 'abc.txt' 

如何解決這類問題。基本上這只是我放棄的一個小例子。

我正在處理這樣一個巨大的問題。

我正在使用現有的軟件包,它只需要從存在的目錄運行,如何解決這類問題,以便我可以從任何地方運行程序。

或者能夠處理上面的例子,在TEST目錄或TEST目錄之外運行。

任何幫助。?

回答

2

我認爲最簡單的辦法是改變當前工作目錄的腳本文件的一個:

import os 
os.chdir(os.path.dirname(__file__)) 

這可能會造成問題,但是,如果腳本也使用文件的原工作目錄。

+0

如何使用這個工具..它給我錯誤。 >>> import os >>> os.path.dirname(__ file__) Traceback(最近呼叫最後一個): 文件「」,第1行,在? NameError:名稱'__file__'未定義 – geek

+0

__file__未定義。 – geek

+4

在此之前退化爲喜劇:標記將兩個下劃線轉換爲__bold__字體。使用'__file__'。 –

0

您的代碼正在查看當前工作目錄,並將其用作查找所需文件的基礎。這幾乎不是一個好主意,正如你現在發現的那樣。

EmilVikström在答案中提到的解決方案是quickfix解決方案,但更正確的解決方案是不使用當前工作目錄作爲起點。

正如在另一個答案中提到的,__file__在解釋器中不可用,但它是您的代碼的絕佳解決方案。

重寫你的第二行是這樣的:

file_path = os.path.join(os.path.dirname(__file__), "..", "abc.txt") 

這將目錄中的當前文件是,先用..再加入它abc.txt,去創造你想要的路徑。

您應該以相同的方式修復代碼中其他地方的類似用法os.getcwd()