Vasili
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 manera mejor de hacerlo?
fedorqui
Puedes usar dirname
:
os.path.dirname(path)
Devuelve el nombre del directorio de la ruta del nombre de la ruta. Este es el primer elemento del par devuelto al pasar la ruta a la función split().
Y dada la ruta completa, puede dividirse normalmente para obtener la última parte de la ruta. Por ejemplo, usando basename
:
os.path.basename(path)
Devuelve el nombre base de la ruta del nombre de la ruta. Este es el segundo elemento del par devuelto al pasar la ruta a la función split(). Tenga en cuenta que el resultado de esta función es diferente del programa de nombre base de Unix; donde basename para ‘/foo/bar/’ devuelve ‘bar’, la función basename() devuelve una cadena vacía (”).
Todos juntos:
>>> import os
>>> path=os.path.dirname("C:/folder1/folder2/filename.xml")
>>> path
'C:/folder1/folder2'
>>> os.path.basename(path)
'folder2'
idjaw
Estás buscando usar dirname. Si solo quiere ese directorio, puede usar os.ruta.nombrebase,
Cuando se ponen todos juntos se ve así:
os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))
Eso debería obtener “other_sub_dir”
El siguiente no es el enfoque ideal, pero originalmente propuse usar os.path.split y simplemente obtener el último elemento. que se vería así:
os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]
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)
os.path.dirname
es lo que buscas –
os.path.dirname(r"C:\folder1\folder2\filename.xml")
Asegúrate de anteponer r
a la cadena para que se considere como una cadena sin procesar.
demostración –
In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml")
Out[46]: 'C:\\folder1\\folder2'
si solo quieres folder2
puedes usar os.path.basename
con lo anterior, Ejemplo –
os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
demostración –
In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
Out[48]: 'folder2'
puedes usar rutalib
from pathlib import Path
Path(r"C:\folder1\folder2\filename.xml").parts[-2]
El resultado de lo anterior fue este:
'folder2'
-
Path(r”C:\folder1\folder2\filename.xml”).parent debería hacer el trabajo
– me iré
9 de mayo de 2022 a las 16:42
tjd sydney
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 desde el final de la lista usando índices negativos.
Como 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
-
Path(r”C:\folder1\folder2\filename.xml”).parent debería hacer el trabajo
– me iré
9 de mayo de 2022 a las 16:42
tabdiukov
Hice una mejora en las soluciones disponibles, a saber, el fragmento que funciona con todos,
- Archivo
- Directorio con una barra inclinada de entrenamiento
- Directorio sin barra inclinada de entrenamiento
mi solución es,
from pathlib import Path
def path_lastname(s):
Path(s).with_name("foo").parts[-2]
Explicación
-
Path(s)
– Crea un objeto Path personalizado a partir des
sin resolverlo. -
.with_name("foo")
– Agrega un archivo falsofoo
al camino -
.parts[-2]
devuelve la penúltima parte de la cadena.-1
parte seráfoo
posible duplicado: Python – Extraiga la ruta de la carpeta de la ruta del archivo
– jfs
27/10/2015 a las 15:40