2010-10-13 14 views

Respuesta

202

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 ''.

+0

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. –

14

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' 
+0

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, –

+0

@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 /')) –

+0

UPDATE2 es el mejor enfoque que he encontrado hasta ahora. – akki

0
path = "/folderA/folderB/folderC/folderD/" 
last = path.split('/').pop() 
+7

En serio, use el módulo 'os.path'. –

0
str = "/folderA/folderB/folderC/folderD/" 
print str.split("/")[-2] 
+0

él quiere 'folderD'. no 'folderC' –

+1

Da" folderD "porque la barra inclinada hace que el último elemento de la lista sea" " – neil

+14

En serio, utiliza el módulo' os.path'. –

1

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:] 
5

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) 
0

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 
+0

¿Qué soluciona su enfoque diferente/mejor que el antes mencionado? – user1767754

+0

me parece mejor, más fácil de leer. –

Cuestiones relacionadas