Відповіді:
Використовуйте 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')
ОНОВЛЕННЯ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'
З 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'
Ось мій підхід:
>>> 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
Я шукав рішення, щоб отримати останнє ім'я папки, де знаходиться файл, я просто split
два рази використав , щоб отримати потрібну частину. Це не питання, але Google переніс мене тут.
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
Наївне рішення (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:]
Мені подобаються частини методи Шляхи для цього:
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}')
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
os.path
модуль.
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD
. ніfolderC
os.path
модуль.
rstrip('/')
це буде простіше, але потім швидко зрозумів, що мені доведеться користуватисяrstrip(os.path.sep)
, тому очевидно використання цьогоnormpath
виправдано.