Как получить только последнюю часть пути в Python? - PullRequest
184 голосов
/ 13 октября 2010

В Python предположим, что у меня есть путь, подобный этому:

/folderA/folderB/folderC/folderD/

Как я могу получить только folderD часть?

Ответы [ 8 ]

305 голосов
/ 13 октября 2010

Используйте os.path.normpath, затем os.path.basename:

>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'

Первый снимает все косые черты, второй дает вам последнюю частьпуть.Использование только basename дает все после последней косой черты, которая в данном случае ''.

18 голосов
/ 13 октября 2010

Вы могли бы сделать

>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')

ОБНОВЛЕНИЕ 1: Этот подход работает, если вы предоставите его /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)

ОБНОВЛЕНИЕ2: Как указал Ларс, внесите изменения, чтобы приспособить трейлинг '/'.

>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
12 голосов
/ 03 июля 2017

Вот мой подход:

>>> 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
6 голосов
/ 11 декабря 2014

Я искал решение, чтобы получить последнее имя папки, где находится файл, я просто использовал split два раза, чтобы получить правильную часть.Это не вопрос, но Google перевел меня сюда.

pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + "   "  + tail)
5 голосов
/ 25 февраля 2019

С python 3 вы можете использовать модуль pathlib (например, pathlib.PurePath):

>>> import pathlib

>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'

Если вы хотите, чтобы имя последней папкигде находится файл:

>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
1 голос
/ 13 октября 2010

Наивное решение (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:]
0 голосов
/ 13 октября 2010
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
0 голосов
/ 13 октября 2010
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...