В Python, предположим, что у меня есть этот путь:Как получить только последнюю часть пути в Python?
/folderA/folderB/folderC/folderD/
Как я могу получить только folderD
часть?
В Python, предположим, что у меня есть этот путь:Как получить только последнюю часть пути в Python?
/folderA/folderB/folderC/folderD/
Как я могу получить только folderD
часть?
Использование os.path.normpath
, затем os.path.basename
:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Первые срывает любые слешей, второй дает последнюю часть пути. Использование только basename
дает все после последней косой черты, которая в этом случае равна ''
.
Вы могли бы сделать
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
Update1: Этот подход работает в случае, если вы даете ему /folderA/folderB/folderC/folderD/xx.py. Это дает xx.py как базовое имя. Думаю, это не то, что вы хотите. Таким образом, вы могли бы сделать это -
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
UPDATE2: Как Lars отметил, что делает изменения так, чтобы приспособить отставая '/'.
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
В Python-думаю, os.path.basename ("... /") правильно дает ''. Да, я тоже считаю, что это не оптимально. Однако ... basename (... normpath ... решение ниже является каноническим). –
@lars да! Просто увидел, что в этом случае сначала нормализуйте путь до подачи его в basename. Os.path.basename (os.path .normpath ('/ folderA/folderB/folderC/folderD /')) –
UPDATE2 - лучший подход, который я нашел до сих пор. – akki
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
Серьезно используйте модуль 'os.path'. –
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
он хочет 'folderD'. не 'folderC' –
Он дает« folderD », потому что конечная косая черта делает последний элемент в списке« » – neil
Серьезно, используйте модуль' os.path'. –
Наивное решение (Python 2.5.2+):
s="/path/to/any/folder/orfile"
desired_dir_or_file = s[s.rindex('/',0,-1)+1:-1] if s.endswith('/') else s[s.rindex('/')+1:]
Я искал решение, чтобы получить последнюю FOLDERNAME, где находится файл, я просто использовал расщепленные два раз, чтобы получить право часть. Это не вопрос, но google перевел меня сюда.
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
Вот мой подход:
>>> import os
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD/test.py'))
folderD
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD/'))
folderD
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD'))
folderC
Что ваш подход решает разные/лучше, чем указано выше? – user1767754
Мне лучше, легче читать. –
Я изначально думал, что 'rstrip ('/')' будет проще, но затем быстро понял, что мне придется использовать 'rstrip (os.path.sep)', поэтому очевидно, что использование 'normpath' оправдано. –