2013-06-12 286 views
51

我已經看到這個解決方案,但不是專門針對Python的。Python - 從文件路徑中提取文件夾路徑

我想只從文件夾的完整路徑獲取文件夾路徑。

例如T:\Data\DBDesign\DBDesign_93_v141b.mdb我想要得到的只是T:\Data\DBDesign(不包括\DBDesign_93_v141b.mdb)。

我已經試過這樣的事情:

existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb' 
wkspFldr = str(existGDBPath.split('\\')[0:-1]) 
print wkspFldr 

,但它給了我這樣的結果:

['T:', 'Data', 'DBDesign'] 

這是不是我要求(即T:\Data\DBDesign)的結果。

關於如何獲取我的文件路徑的任何想法?

謝謝。

回答

71

您幾乎在那裏使用了split函數。你只需要加入字符串,如下所示。

>>> '\\'.join(existGDBPath.split('\\')[0:-1]) 
'T:\\Data\\DBDesign' 

雖然,我會建議使用os.path.dirname功能做到這一點,你只需要通過字符串,它會爲你做的工作。因爲,你似乎在窗戶上,請考慮使用abspath函數。一個例子 -

>>> os.path.dirname(os.path.abspath(existGDBPath)) 
'T:\\Data\\DBDesign' 

如果你想同時文件名和被拆分後的目錄路徑,您可以使用os.path.split函數返回一個元組,如下所示。

>>> os.path.split(os.path.abspath(existGDBPath)) 
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb') 
+0

燦爛,非常感謝這裏你的幫助。這已經非常豐富。我將使用abspath選項。 – Genspec

16

內置子模塊os.path具有該任務的功能。

import os 
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb') 
36

使用os.path模塊:

>>> import os 
>>> existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb' 
>>> wkspFldr = os.path.dirname(existGDBPath) 
>>> print wkspFldr 
'T:\Data\DBDesign' 

您可以繼續假設,如果你需要做一些文件名操縱它已經在os.path實施。如果沒有,你仍然可能需要使用這個模塊作爲構建模塊。

UPDATE

每個人都應該考慮使用pathlib新的發展。它在Python3.4的stdlib中,但是早期版本的available on PyPI。這個庫提供了一個更加面向對象的方法來操縱路徑<opinion>,並且使用</opinion>更容易閱讀和編程。

>>> import pathlib 
>>> existGDBPath = pathlib.Path(r'T:\Data\DBDesign\DBDesign_93_v141b.mdb') 
>>> wkspFldr = existGDBPath.parent 
>>> print wkspFldr 
Path('T:\Data\DBDesign') 
0

下面是代碼:

import os 
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb' 
wkspFldr = os.path.dirname(existGDBPath) 
print wkspFldr # T:\Data\DBDesign