Respostas:
Use os.path.normpath
, então os.path.basename
:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
A primeira retira qualquer barra à direita, a segunda fornece a última parte do caminho. Usar apenas basename
fornece tudo após a última barra, que neste caso é ''
.
Você poderia fazer
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
UPDATE1: Essa abordagem funciona caso você a /folderA/folderB/folderC/folderD/xx.py. Isso fornece xx.py como o nome da base. O que não é o que você quer, eu acho. Então você poderia fazer isso -
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
UPDATE2: Como Lars apontou, fazer alterações para acomodar o '/' à direita.
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Com o python 3, você pode usar o pathlib
módulo ( pathlib.PurePath
por exemplo):
>>> import pathlib
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
Se você deseja o último nome da pasta em que um arquivo está localizado:
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
Aqui está a minha abordagem:
>>> 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
Eu estava procurando uma solução para obter o último nome da pasta onde o arquivo está localizado, usei apenas split
duas vezes, para obter a parte certa. Não é a questão, mas o Google me transferiu para cá.
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
Uma solução ingênua (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:]
Eu gosto do método de partes do Path para isso:
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
módulo.
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD
. nãofolderC
os.path
módulo.
rstrip('/')
que seria mais simples, mas logo percebi que teria que usarrstrip(os.path.sep)
, portanto, obviamente, o uso denormpath
é justificado.