HOWTO · Python
Obtener el directorio de la ruta en Python
Este tutorial demuestra cómo extraer una parte de la ruta del archivo en Python.
En esta página
Para obtener el directorio padre de una ruta de archivo, pásala a os.path.dirname(). Como alternativa orientada a objetos, usa Path(file_path).parent de pathlib. Ambos devuelven el directorio que contiene el archivo; no indican el directorio de trabajo actual del proceso.
Los ejemplos usan rutas con barras diagonales para que sus resultados sean fáciles de leer. Las funciones de rutas de Python interpretan las rutas según el sistema operativo anfitrión. Para construir rutas a partir de componentes separados, usa os.path.join() o pathlib en vez de insertar un separador manualmente.
Entender los separadores de ruta
Una ruta separa los nombres de directorio y el componente final mediante un separador propio de cada plataforma. Los sistemas POSIX suelen usar /; las rutas de Windows suelen usar \\, aunque Windows también acepta / en muchas operaciones con rutas. os.sep proporciona el separador de la plataforma actual. Para el manejo habitual de rutas, pasa la ruta a os.path o usa pathlib, en lugar de elegir el separador mediante condiciones.
Obtener un nombre de archivo con os.path.basename
os.path.basename() devuelve el componente final de una ruta. En una ruta de archivo, suele ser el nombre del archivo, incluida su extensión; no devuelve el directorio. Para obtener el nombre del directorio final de una ruta de archivo, primero obtén su directorio padre con os.path.dirname() y luego pasa ese resultado a os.path.basename().
import os
file_path = "/home/user/documents/report.txt"
filename = os.path.basename(file_path)
parent_directory = os.path.dirname(file_path)
last_directory = os.path.basename(parent_directory)
print(filename)
print(last_directory)
report.txt
documents
Separar el nombre de archivo y la extensión con os.path.splitext
os.path.splitext() separa la extensión del componente final de la ruta y devuelve un par (root, ext). La extensión está vacía o empieza con un punto; esta función no devuelve un directorio. Si necesitas el directorio, usa os.path.dirname().
import os
file_path = "/home/user/documents/report.txt"
root, extension = os.path.splitext(file_path)
directory = os.path.dirname(file_path)
print(root)
print(extension)
print(directory)
/home/user/documents/report
.txt
/home/user/documents
Para un nombre de archivo como archive.tar.gz, splitext() separa únicamente el sufijo final, .gz. La raíz devuelta sigue conteniendo archive.tar, así que el manejo de extensiones debe ajustarse a la convención de nombres que use tu aplicación.
Obtener un directorio a partir de una ruta de archivo con os.path.dirname
os.path.dirname() devuelve como cadena la parte de una ruta que corresponde al directorio. Es la opción directa cuando ya tienes una ruta como cadena y quieres obtener el directorio padre de su componente final. El enlace disponible corresponde a la página en inglés; el inventario no incluye un destino localizado al español.
import os
file_path = "/home/user/documents/report.txt"
directory = os.path.dirname(file_path)
print(directory)
/home/user/documents
Usa la misma variable para la entrada y la llamada a la función. La función opera sobre el texto de la ruta; no comprueba si el archivo o el directorio existen. Si necesitas crear, enumerar o inspeccionar el directorio, realiza por separado la operación correspondiente del sistema de archivos.
Obtener un directorio padre con pathlib
pathlib proporciona objetos Path para trabajar con rutas. El atributo Path.parent devuelve la ruta padre como otro objeto Path, lo que resulta práctico al encadenar operaciones con rutas o al pasar rutas a API que aceptan valores similares a una ruta.
from pathlib import Path
file_path = Path("/home/user/documents/report.txt")
parent_directory = file_path.parent
print(parent_directory)
print(file_path.parts)
/home/user/documents
('/', 'home', 'user', 'documents', 'report.txt')
Path.parts es una tupla que contiene los componentes de la ruta; es un atributo, no una función. Elige Path.parent para obtener el directorio padre y usa parts cuando necesites examinar o indexar componentes individuales.
Resolver rutas relativas y obtener el directorio de trabajo actual
Una ruta relativa se interpreta desde el directorio de trabajo actual del proceso. os.path.abspath() convierte una ruta relativa en una ruta absoluta usando ese directorio de trabajo. Para obtener el directorio que contiene la ruta resultante, pásala a os.path.dirname(). El enlace disponible corresponde a la página en inglés; el inventario no incluye un destino localizado al español.
import os
relative_path = "documents/report.txt"
absolute_path = os.path.abspath(relative_path)
file_directory = os.path.dirname(absolute_path)
print(absolute_path)
print(file_directory)
/work/documents/report.txt
/work/documents
Path.cwd() devuelve el directorio de trabajo actual como objeto Path, mientras que os.getcwd() lo devuelve como cadena. Ambos indican el directorio de trabajo del proceso, que puede ser distinto del directorio que contiene el script de Python. Úsalos cuando necesites saber desde dónde parten las rutas relativas; dentro de un script, usa Path(__file__).parent si necesitas el directorio que contiene ese script.
import os
from pathlib import Path
print(Path.cwd())
print(os.getcwd())
/work
/work