2011-10-16 34 views
113

我想在其下.py文件執行當前目錄的路徑。os.path.dirname(__ FILE__)返回空

簡單的文件D:\test.py與代碼:

import os 

print os.getcwd() 
print os.path.basename(__file__) 
print os.path.abspath(__file__) 
print os.path.dirname(__file__) 

它是有線輸出是:

D:\ 
test.py 
D:\test.py 
EMPTY 

我期待從getcwd()path.dirname()相同的結果。

鑑於os.path.abspath = os.path.dirname + os.path.basename,爲什麼

os.path.dirname(__file__) 

返回空?

回答

183

因爲os.path.abspath = os.path.dirname + os.path.basename不成立。我們寧願

os.path.dirname(filename) + os.path.basename(filename) == filename 

兩個dirname()basename()只拆分通過文件名成組件,而不考慮當前目錄。如果你還想考慮當前目錄,你必須明確地這樣做。

要獲得絕對路徑的目錄名稱,使用

os.path.dirname(os.path.abspath(__file__)) 
+3

斯文嗨,你是正確的,它應該是os.path.dirname(os.path.abspath則(__ FILE__))。謝謝!只是FYI,你會在最後一行發現一個小錯字。 – Flake

+8

注意上面的評論有一個大膽的地方,因爲降價格式化,雙方都應該有下劃線。原始答案已被正確更改 – watsonic

+1

請注意,我們從來沒有'os.path.dirname(filename)+ os.path.basename(filename)== filename',因爲目錄分隔符丟失。 我們寧願有: 'os.path.join(os.path.dirname(文件名),os.path.basename(文件名))== filename' –

3
print(os.path.join(os.path.dirname(__file__))) 

你也可以用這種方式

1
import os.path 

dirname = os.path.dirname(__file__) or '.' 
6

也可以使用這樣的:

dirname(dirname(abspath(__file__))) 
+0

@Sven Marnach的回答作品,但這種感覺乾淨多了。 – lordB8r

3
os.path.split(os.path.realpath(__file__))[0] 

os.path.realpath(__file__)返回當前腳本的abspath; os.path.split這樣(ABSPATH)[0]返回當前目錄