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.