HOWTO · Python

Cómo obtener el nombre de archivo del ruta en Python

Este tutorial demostrará diferentes métodos en Python para extraer el nombre de archivo de una ruta de archivo, incluidos os.path.split(), os.path.basename(), ntpath.basename() y pathlib.Path.name.

En esta página

En programación, a menudo necesitamos extraer el nombre de archivo de una ruta de archivo dada. Consideremos un escenario en el que tenemos una ruta de archivo, como C:\Documents\Project\file.txt, y necesitamos extraer solo el nombre de archivo, es decir, file.txt. Es una tarea rutinaria en la gestión de archivos, el análisis de datos y el desarrollo web, y Python ofrece varias formas de hacerlo.

Este tutorial presenta cuatro métodos para obtener un nombre de archivo a partir de una ruta en Python: os.path.split(), os.path.basename(), ntpath.basename() y pathlib.Path.name. Se diferencian principalmente en lo que ofrecen además del nombre de archivo, y en cómo tratan las rutas escritas para un sistema operativo distinto del que ejecuta tu código.

Utilice la función os.path.split() para obtener el nombre de archivo de la ruta en Python

La función os.path.split() divide una ruta de archivo en sus componentes de directorio y nombre de archivo, de modo que puedes recuperar solo la parte del nombre de archivo, o conservar ambas partes, si también necesitas el directorio.

Sintaxis:

import os

directory, filename = os.path.split(path)

Parámetros: La función os.path.split() acepta un único parámetro.

  • path: Este parámetro representa la ruta de archivo de la que queremos extraer el nombre de archivo. Puede ser una cadena que contenga la ruta absoluta o relativa del archivo.

Valores devueltos: La función devuelve una tupla que contiene dos elementos.

  • directory: Esta variable contiene el componente de directorio de la ruta, sin el nombre de archivo.

  • filename: Esta variable contiene el nombre de archivo extraído de la ruta.

El siguiente fragmento de código demuestra cómo podemos obtener un nombre de archivo de una ruta en Python utilizando la función os.path.split().

import os

directory, filename = os.path.split("MyFolder/MySubFolder/MyFile.txt")
print(directory)
print(filename)

Salida:

MyFolder/MySubFolder
MyFile.txt

La variable directory contiene MyFolder/MySubFolder, el componente de directorio de la ruta de archivo, y la variable filename almacena MyFile.txt, el nombre de archivo extraído. Utiliza este método cuando necesites ambas partes; si solo necesitas el nombre de archivo, el siguiente método es más corto.

Utilice la función os.path.basename() para obtener el nombre de archivo de la ruta en Python

La función os.path.basename() devuelve el último componente de una ruta, que suele ser el nombre de archivo. Forma parte del módulo os.path, cuyas reglas de separador siguen al sistema operativo en el que se ejecuta el código.

Sintaxis:

import os

filename = os.path.basename(path)

Parámetros: La función os.path.basename() acepta un único parámetro.

  • path: Este parámetro representa la ruta de archivo de la que queremos extraer el nombre de archivo. Puede ser una cadena que contenga la ruta absoluta o relativa del archivo.

Valor devuelto: La función devuelve una cadena que representa el nombre de archivo extraído de la ruta dada.

Si bien tanto os.path.basename() como os.path.split() pueden extraer nombres de archivo de rutas, os.path.basename() se centra únicamente en el componente del nombre de archivo y lo devuelve como una cadena, lo que la convierte en la opción más sencilla cuando no necesitas la parte del directorio.

import os

filename = os.path.basename("MyFolder/MySubFolder/MyFile.txt")
print(filename)

Salida:

MyFile.txt

El resultado, el nombre de archivo MyFile.txt, se asigna a la variable filename y se imprime.

Utilice la biblioteca ntpath para obtener el nombre de archivo de la ruta en Python

El módulo ntpath de Python implementa la manipulación de rutas para rutas de Windows, sea cual sea el sistema en el que se ejecute tu código. Esto es importante cuando tienes que procesar rutas de estilo Windows en una máquina Linux o macOS: allí, os.path.basename() no trata la barra invertida como separador, por lo que os.path.basename("MyFolder\\MySubFolder\\MyFile.txt") devuelve la cadena completa, mientras que ntpath.basename() devuelve el nombre de archivo.

Sintaxis:

import ntpath

filename = ntpath.basename(path)

Parámetros: La función ntpath.basename() acepta un único parámetro.

  • path: Este parámetro representa la ruta de archivo de la que queremos extraer el nombre de archivo. Puede ser una cadena que contenga la ruta absoluta o relativa del archivo.

Valor devuelto: La función devuelve una cadena que representa el nombre de archivo extraído de la ruta dada.

El siguiente fragmento de código demuestra cómo podemos obtener un nombre de archivo de una ruta de Windows en Python utilizando la función ntpath.basename().

import ntpath

filename = ntpath.basename("MyFolder\\MySubFolder\\MyFile.txt")
print(filename)

Salida:

MyFile.txt

Utiliza ntpath cuando las rutas que procesas son rutas de Windows pero tu código puede ejecutarse en cualquier lugar; en una máquina Windows, os.path ya sigue las mismas reglas, por lo que ambos se comportan igual allí.

Utilice el módulo pathlib para obtener el nombre de archivo de la ruta en Python

El módulo pathlib proporciona un enfoque orientado a objetos para trabajar con rutas de archivo. Su clase Path encapsula las operaciones relacionadas con rutas, y el nombre de archivo está disponible directamente como el atributo .name de un objeto Path.

from pathlib import Path

filename = Path("MyFolder/MySubFolder/MyFile.txt").name
print(filename)

Salida:

MyFile.txt

Más allá de .name, el mismo objeto te da el directorio padre (.parent), la extensión (.suffix) y el nombre de archivo sin la extensión (.stem), lo que convierte a pathlib en la opción conveniente cuando necesitas más que solo el nombre de archivo.

Conclusión

Hemos explorado 4 métodos diferentes en Python para extraer el nombre de archivo de una ruta de archivo: os.path.split(), os.path.basename(), ntpath.basename() y pathlib.Path.name. Cada método tiene ventajas y desventajas, lo que los hace adecuados para diferentes escenarios.

El método os.path.split() puede dividir una ruta en sus componentes de directorio y nombre de archivo. Esta granularidad permite un mayor control sobre la ruta, pero requiere código adicional para acceder solo al nombre de archivo. Sin embargo, funciona en diferentes sistemas operativos, lo que lo hace versátil.

Por otro lado, os.path.basename() ofrece un enfoque más simple al extraer directamente el nombre de archivo de la ruta. Es compatible con varias plataformas y ofrece una solución sencilla. Sin embargo, solo devuelve el nombre de archivo como una cadena.

Para rutas específicas de Windows, ntpath.basename() está diseñado para manejar estas rutas en cualquier sistema operativo. Extrae directamente el nombre de archivo sin necesidad de código adicional. Sin embargo, se limita a rutas de Windows y carece de compatibilidad multiplataforma.

Por último, pathlib.Path.name proporciona un enfoque orientado a objetos para trabajar con rutas. Permite una mayor manipulación de rutas y se integra bien con otras funcionalidades de pathlib. Sin embargo, introduce cierta complejidad para la simple extracción del nombre de archivo y requiere importar el módulo pathlib.