En Python, ¿qué comando debo usar para obtener el nombre de la carpeta que contiene el archivo con el que estoy trabajando?
"C:\folder1\folder2\filename.xml"
Aquí "folder2"es lo que quiero conseguir.
Lo único que se me ocurrió es usar os.path.splitdos veces:
folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]
¿Hay alguna forma mejor de hacerlo?
                    
                        python
                                python-3.x
                                directory
                                
                    
                    
                        Vasily
fuente
                
                fuente

Respuestas:
Puede utilizar
dirname:Y dada la ruta completa, puede dividir normalmente para obtener la última parte de la ruta. Por ejemplo, usando
basename:Todos juntos:
>>> import os >>> path=os.path.dirname("C:/folder1/folder2/filename.xml") >>> path 'C:/folder1/folder2' >>> os.path.basename(path) 'folder2'fuente
os.path.basenameEstá buscando utilizar dirname . Si solo desea ese directorio, puede usar os.path.basename ,
Cuando se pone todo junto, se ve así:
os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))Eso debería darte "other_sub_dir"
El siguiente no es el enfoque ideal, pero lo propuse originalmente, usando os.path.split, y simplemente obtengo el último elemento. que se vería así:
os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]fuente
str.split, es mejor usaros.path.split(que maneja mejor las diferencias de diferentes sistemas operativos).esto es bastante antiguo, pero si está usando Python 3.4 o superior, use PathLib .
# using OS import os path=os.path.dirname("C:/folder1/folder2/filename.xml") print(path) print(os.path.basename(path)) # using pathlib import pathlib path = pathlib.PurePath("C:/folder1/folder2/filename.xml") print(path.parent) print(path.parent.name)fuente
os.path.dirnamees lo que estas buscando -os.path.dirname(r"C:\folder1\folder2\filename.xml")Asegúrese de anteponer
rla cadena para que se considere una cadena sin procesar.Demo -
In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml") Out[46]: 'C:\\folder1\\folder2'Si lo desea
folder2, puede usaros.path.basenamecon lo anterior, Ejemplo -os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))Demo -
In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml")) Out[48]: 'folder2'fuente
Puede obtener la ruta completa como una cadena y luego dividirla en una lista usando el carácter separador de su sistema operativo. Luego, obtiene el nombre del programa, el nombre de la carpeta, etc. accediendo a los elementos del final de la lista utilizando índices negativos.
Me gusta esto:
import os strPath = os.path.realpath(__file__) print( f"Full Path :{strPath}" ) nmFolders = strPath.split( os.path.sep ) print( "List of Folders:", nmFolders ) print( f"Program Name :{nmFolders[-1]}" ) print( f"Folder Name :{nmFolders[-2]}" ) print( f"Folder Parent:{nmFolders[-3]}" )El resultado de lo anterior fue este:
Full Path :C:\Users\terry\Documents\apps\environments\dev\app_02\app_02.py List of Folders: ['C:', 'Users', 'terry', 'Documents', 'apps', 'environments', 'dev', 'app_02', 'app_02.py'] Program Name :app_02.py Folder Name :app_02 Folder Parent:devfuente
puedes usar pathlib
from pathlib import Path Path(r"C:\folder1\folder2\filename.xml").parts[-2]El resultado de lo anterior fue este:
'folder2'fuente