2012-06-08 60 views
1

我有這樣的目錄結構:os.path.join(os.path.dirname(__ FILE__))沒有返回

--bin/ 
--lib/ 
--data/ 

所以基本上,可執行腳本在bin和它在調用文件LIB ..但LIB有數據

文本文件來傳達這通常使用的工作: 在通常讀取文件我用它來做到這一點

file_path = os.path.join(os.path.dirname(__file__))+ "/../" +"data/"+filename 
f = open(file_path,"r") 

但是,在這種情況下,如果ID ○:

print os.path.join(os.path.dirname(__file__)) 
    returns nothing? 

我在做什麼錯.. 感謝

+0

你可以舉一個__文件的確切內容的例子___ – Dhara

回答

3

我想用什麼你的意思是一個空字符串?這隻能是這種情況,如果__file__首先是空字符串。你不小心覆蓋了__file__

+0

我不確定,我很明白...(抱歉..仍然在學習這一切)..有兩個文件file1.py在那裏我是閱讀一個文件..它的工作原理..然後在file2.py(這是讀取後file1.py),我做同樣的事情..但它返回空字符串 – Fraz

+0

嘿..謝謝..它的作品..我的壞..我正在這樣做。 filepath = os.path.join(os.path.dirname(__ file __))+「/../」+「data /」+ filename 所以它返回一個null ..作爲文件名,然後+「/。 。「意思是去cding null我想:)謝謝 – Fraz

1

這取決於你如何開始你的腳本,例如:

如果/bin/script.py包含:

import os 
print os.path.dirname(__file__) #no reason to use os.path.join() 

則:

$> python /bin/script.py 
/bin 
$> cd /bin 
$> python script.py 
         #nothing 
$> 

It'a一個更好的主意使用以下:

file_path = os.path.abspath(__file__) 

,然後做任何你想要的。

3

除了別人的另外一個評論...的os.path.join點是爲了避免類似的事情

mypath=dir + '/' + subdir + '/'+filename 

這是使用

mypath=os.path.join(dir,subdir,filename) # can have as many arguments as you want! 

也做了很多更清潔,可避免明確的'..'和'。'在路徑名稱中使用os.pardiros.curdir。 (例如)

file_path = os.path.join(os.path.dirname(__file__),os.pardir,'data',filename) 

這應該提高代碼的可移植性(和是一個很好的習慣進入,即使你不運行此腳本其他地方計劃)。