2011-07-12 104 views
1

我在Windows中編寫了一個Python腳本2.5,它的CurrentDir = C:\users\spring\projects\sw\demo\753\ver1.1\011\rev120\source我的文件是test.py。從這條路徑我想訪問這個路徑中的文件:C:\users\spring\projects\sw\demo\753\ver1.1\011\rev120\Common\在python中操作路徑

我試過使用os.path.join,但它不起作用,我從文檔我明白爲什麼。 那麼最好的pythonic解決方案是什麼?

currentdir = os.getcwd()  
config_file_path = os.path.join(currentdir,"\\..\\Common") 
+0

張貼一些代碼。什麼不工作? –

+0

代碼片段將有助於追蹤問題。 –

+0

你爲什麼使用古代的蟒蛇版本? – ThiefMaster

回答

2

你的問題可以通過使用os.path.join來解決,但你沒有正確使用它。

currentdir = os.getcwd()  
config_file_path = os.path.join(currentdir,"\\..\\Common") 

"\\..\\Common"不是相對路徑,因爲它與\開始。

您需要加入..\\Common,這是一個相對路徑。

請注意,os.path.join不是簡單的字符串連接函數,您不需要插入中間反斜槓。

所以固定代碼如下:

config_file_path = os.path.join(currentdir,"..\\Common") 

,或者:

config_file_path = os.path.join(currentdir, "..", "Common") 
2
from os.path import dirname, join 
join(dirname(dirname(__file__)), 'Common') 

應該工作。

+0

將全局範圍導入全局範圍非常麻煩。 – ThiefMaster

+0

@ThiefMaster只是導入兩個函數幾乎不能算作「所有東西」,並且使行看起來不那麼神祕。當然,你可以編寫'os.path.join(os.path.dirname(os.path.dirname(__ file__)),'Common')' – phihag

+2

在一個小腳本中你是對的,但是在一個包含少量百SLOC有人不會指望'加入'來自'os.path',而是更通用的東西... – ThiefMaster

0

試試這個:

joined = os.path.join('C:\\users\\spring\\projects\\sw\\demo\\753\\ver1.1\\011\\rev120\\source', '..\\Common\\') 
# 'C:\\users\\spring\\projects\\sw\\demo\\753\\ver1.1\\011\\rev120\\source\\..\\Common\\' 
canonical = os.path.realpath(joined) 
# 'C:\\users\\spring\\projects\\sw\\demo\\753\\ver1.1\\011\\rev120\\Common' 
+1

'os.path.join'已經解決'..' – ThiefMaster

+0

我使用os.getcwd()返回'C:\ users \ spring \ projects \ sw \ demo \ 753 \ ver1.1 \ 011 \ rev120 \ source',當我嘗試使用連接時,我只能得到C:\ common這不是我想要的 – spring

+0

@ThiefMaster該註釋是來自Python解釋器的複製粘貼。 'join()'沒有刪除'..'。我同意儘管路徑是可用的,並且調用'realpath()'是完全不必要的。 –