Respuestas:
Use os.path.normpath
, entonces os.path.basename
:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
La primera elimina cualquier barra diagonal, la segunda le proporciona la última parte del camino. Usar solo basename
da todo después de la última barra, que en este caso es ''
.
Podrías hacerlo
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
ACTUALIZACIÓN1: este enfoque funciona en caso de que le des /folderA/folderB/folderC/folderD/xx.py. Esto da xx.py como el nombre base. Que no es lo que quieres, supongo. Entonces podrías hacer esto ...
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
ACTUALIZACIÓN2: Como señaló lars , realizar cambios para acomodar el final '/'.
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Con python 3 puedes usar el pathlib
módulo ( pathlib.PurePath
por ejemplo):
>>> import pathlib
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
Si desea el último nombre de carpeta donde se encuentra un archivo:
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
Aquí está mi enfoque:
>>> 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
Estaba buscando una solución para obtener el último nombre de carpeta donde se encuentra el archivo, solo lo usé split
dos veces, para obtener la parte correcta. No es la pregunta, pero Google me transfirió aquí.
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
Una solución ingenua (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:]
Me gusta el método de partes de Path para esto:
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
. nofolderC
os.path
módulo.
rstrip('/')
que sería más simple, pero luego me di cuenta rápidamente de que tenía que usarrstrip(os.path.sep)
, por lo que obviamente el uso denormpath
está justificado.