2011-11-22 38 views
3

我知道,去到一個父目錄,你應該使用如何在Python中查找兩個目錄?

parentname = os.path.abspath(os.path.join(yourpath, os.path.pardir)) 

但是,如果我想獲得一個目錄的名稱是什麼幾個文件夾呢?

說我給了/ stuff/home/blah/pictures/myaccount/album,我想獲取最後兩個文件夾「myaccount」和「album」的名稱(不是路徑,只是名稱)在我的腳本中使用。我怎麼做?

回答

2
>>> p='/stuff/home/blah/pictures/myaccount/album' 
>>> os.path.abspath(p).split(os.sep)[-1] 
'album' 
>>> os.path.abspath(p).split(os.sep)[-2] 
'myaccount' 
>>> os.path.abspath(p).split(os.sep)[-3] 
'pictures' 
>>> os.path.abspath(p).split(os.sep)[-4] 
'blah' 

等等

2

有不看是什麼特別優雅,但這個應該做的伎倆:

>>> yourpath = "/stuff/home/blah/pictures/myaccount/album" 
>>> import os.path 
>>> yourpath = os.path.abspath(yourpath) 
>>> (npath, d1) = os.path.split(yourpath) 
>>> (npath, d2) = os.path.split(npath) 
>>> print d1 
album 
>>> print d2 
myaccount 

請記住,如果提供的路徑在結束os.path.split會返回一個空字符串第二組分尾隨斜線,因此如果不另外驗證所提供路徑的格式,則可能需要確保先將其去掉。

2

將路徑拆分成list並獲取最後兩個元素如何?

>>> import os 
>>> path_str = ' /stuff/home/blah/pictures/myaccount/album' 
>>> path_str.split(os.sep) 
[' ', 'stuff', 'home', 'blah', 'pictures', 'myaccount', 'album'] 

對於諸如...os.path.abspath()相對路徑可以用於預先處理路徑串。

>>> import os 
>>> path_str = os.path.abspath('.') 
>>> path_str.split(os.sep) 
['', 'tmp', 'foo', 'bar', 'foobar'] 
+0

這不是法律,但奇怪的是格式化的路徑,面對強大的特別,像用'.'或''//作爲路徑元素。 –

+0

感謝您的評論,我只是使用問題中給出的路徑字符串。我認爲對於真實環境,可以使用'os.path.abspath()'來預處理路徑字符串。 – hzm

+0

是的,這可能比在我的答案中使用'normpath'更強大 - 將更新它.. :-) –