En Python, supongamos que tengo un camino como éste:¿Cómo obtener solo la última parte de una ruta en Python?
/folderA/folderB/folderC/folderD/
¿Cómo puedo obtener sólo la parte folderD
?
En Python, supongamos que tengo un camino como éste:¿Cómo obtener solo la última parte de una ruta en Python?
/folderA/folderB/folderC/folderD/
¿Cómo puedo obtener sólo la parte folderD
?
Uso os.path.normpath
, entonces os.path.basename
:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Las primeras tiras fuera de barras al final, la segunda le da la última parte de la ruta. El uso de solo basename
da todo después de la última barra, que en este caso es ''
.
Usted podría hacer
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
Update1: Este enfoque funciona en caso de que se le da /folderA/folderB/folderC/folderD/xx.py. Esto le da xx.py como el nombre base. Que no es lo que quieres, supongo. Por lo que podría hacer esto -
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
Update2: Como Lars señalaron, hacer cambios con el fin de acomodar arrastrando '/'.
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
En Python-pensar, os.path.basename ("... /") produce correctamente ''. Sí, yo también encuentro que no es óptimo. El ... basename (... normpath ... la solución de abajo es canónica, –
@lars, sí, acabo de ver que en ese caso normaliza el camino primero antes de alimentarlo al nombre base. Os.path.basename (os.path) .normpath ('/ folderA/folderB/folderC/folderD /')) –
UPDATE2 es el mejor enfoque que he encontrado hasta ahora. – akki
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
En serio, use el módulo 'os.path'. –
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
él quiere 'folderD'. no 'folderC' –
Da" folderD "porque la barra inclinada hace que el último elemento de la lista sea" " – neil
En serio, utiliza el módulo' os.path'. –
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:]
que estaba buscando una solución para conseguir la última de carpeta donde se encuentra el archivo, acabo de utilizar divididas dos veces, para obtener el derecho parte. 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)
Aquí es 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
¿Qué soluciona su enfoque diferente/mejor que el antes mencionado? – user1767754
me parece mejor, más fácil de leer. –
Inicialmente pensé que 'rstrip ('/')' sería más simple, pero luego me di cuenta de que tendría que usar 'rstrip (os.path.sep)', así que obviamente el uso de 'normpath' está justificado. –