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.split
dos 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.basename
Está 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.dirname
es lo que estas buscando -os.path.dirname(r"C:\folder1\folder2\filename.xml")
Asegúrese de anteponer
r
la 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.basename
con 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:dev
fuente
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