Получить имя папки в Python

В Python, какую команду следует использовать для получения имени папки, содержащей файл, с которым я работаю?

"C:\folder1\folder2\filename.xml"

Здесь "folder2" - это то, что я хочу получить.

Единственное, что я придумал, это использовать os.path.split дважды:

folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]

Есть ли лучший способ сделать это?

Ответ 1

Вы можете использовать dirname:

os.path.dirname(path)

Верните имя каталога пути пути. Это первый элемент пары, возвращенной путем прохождения пути к функции split().

И учитывая полный путь, вы можете нормально разбить, чтобы получить последнюю часть пути. Например, используя basename:

os.path.basename(path)

Верните базовое имя пути пути. Это второй элемент пара возвращается путем прохождения пути к функции split(). Обратите внимание, что результат этой функции отличается от базового имени Unix программа; где basename для '/foo/bar/' возвращает 'bar', basename() функция возвращает пустую строку ('').


Все вместе:

>>> import os
>>> path=os.path.dirname("C:/folder1/folder2/filename.xml")
>>> path
'C:/folder1/folder2'
>>> os.path.basename(path)
'folder2'

Ответ 2

Вы хотите использовать dirname. Если вам нужен только один каталог, вы можете использовать os.path.basename,

При объединении это выглядит следующим образом:

os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))

Это должно заставить вас "other_sub_dir"

Ниже приведен не идеальный подход, но я изначально предложил использовать os.path.split и просто получить последний элемент. который будет выглядеть следующим образом:

os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]

Ответ 3

os.path.dirname - это то, что вы ищете -

os.path.dirname(r"C:\folder1\folder2\filename.xml")

Убедитесь, что вы добавили r к строке, чтобы ее считали исходной строкой.

Демо -

In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml")
Out[46]: 'C:\\folder1\\folder2'

Если вы просто хотите folder2, вы можете использовать os.path.basename выше, Пример -

os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))

Демо -

In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
Out[48]: 'folder2'