Подтвердить что ты не робот

Как получить только последнюю часть пути в Python?

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

/folderA/folderB/folderC/folderD/

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

>>> 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: Как указывали листы, внося изменения, чтобы разместить трейлинг "/".

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

Ответ 3

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

>>> 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

Ответ 4

В 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'

Ответ 5

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

pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + "   "  + tail)

Ответ 6

Наивное решение (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:]

Ответ 7

path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()

Ответ 8

str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]

Ответ 9

Мне нравится метод Path parts для этого:

grandparent_directory, parent_directory, filename = Path(export_filename).parts[-3:]
log.info(f'{t: <30}: {num_rows: >7} Rows exported to {grandparent_directory}/{parent_directory}/{filename}')