Как посмотреть две директории в Python? - PullRequest
3 голосов
/ 22 ноября 2011

Я знаю, что для перехода к родительскому каталогу вы должны использовать

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

Но что, если я хочу получить имя каталога несколькими папками вверх?

СкажитеМне дали / stuff / home / blah / pictures / myaccount / album, и я хочу получить имена последних двух папок «myaccount» и «album» (не пути, а только имена) для использования в моем сценарии,Как мне это сделать?

Ответы [ 3 ]

2 голосов
/ 22 ноября 2011

Как насчет разделения пути к списку и получения двух последних элементов?

>>> 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']
2 голосов
/ 22 ноября 2011
>>> 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 голосов
/ 22 ноября 2011

Нет ничего особенно элегантного, но это должно сработать:

>>> 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 вернет пустую строку длявторой компонент, если указанный путь заканчивается косой чертой, поэтому вы можете сначала убрать его, если не проверяете формат предоставленного пути в противном случае.

...