Manipular nombres de ficheros y directorios es una tarea muy común en muchas aplicaciones. Por ejemplo, para listar los ficheros de un directorio, navegar entre carpetas, … En este post aprenderás cómo obtener el nombre de un archivo en Python dada una ruta.
Para ello, haremos uso del módulo os.path
. Este módulo, que pertenece a la librería estándar de Python, ofrece funciones de utilidad para manipular nombres de rutas del sistema operativo.
Cómo obtener el nombre de un archivo a partir de una ruta
Imaginemos que tenemos la siguiente ruta: /Users/Juanjo/workspace/j2logo/pruebas.txt
para obtener el nombre del fichero, pruebas.txt
, llamaremos a la función split()
del módulo os.path
:
>>> import os >>> ruta = '/Users/Juanjo/workspace/j2logo/pruebas.txt' >>> os.path.split(ruta) ('/Users/Juanjo/workspace/j2logo', 'pruebas.txt')
Como puedes apreciar, esta función devuelve dos valores. El primero de ellos es el directorio en el que se encuentra el fichero, mientras que el segundo, es el nombre del propio archivo.
Realmente, la función split()
divide el nombre de una ruta en dos: cabeza y cola. El primer valor devuelto siempre es la cabeza y el segundo la cola. Esto lo hace en función de dónde encuentre el último carácter /
. La parte de la cola nunca contendrá un carácter /
. Si la ruta termina en una barra inclinada, la cola estará vacía. Si no hay una barra en la ruta, la cabeza estará vacía. Veámoslo con un ejemplo:
>>> import os # La ruta acaba en / >>> ruta = '/Users/Juanjo/workspace/j2logo/' >>> os.path.split(ruta) ('/Users/Juanjo/workspace/j2logo', '') # No hay carácter / en la ruta >>> ruta = 'pruebas.txt' >>> os.path.split(ruta) ('', 'pruebas.txt')
Obtener la extensión de un fichero
Otra función de utilidad del módulo os.path
para manipular nombres de fichero es splitext()
. Esta función la podemos usar para separar el nombre de un fichero en dos: el propio nombre y su extensión.
>>> import os >>> ruta = 'pruebas.txt' >>> os.path.splitext(ruta) ('pruebas', '.txt')
La función divide una ruta a partir de encontrar el carácter .
y devuelve una raíz y una extensión (que comienza con el carácter .
). Si la ruta comienza por el carácter .
y no hubiera ningún punto más, entonces la extensión se devuelve vacía.
>>> import os # Ruta que comienza con . y solo hay ese >>> ruta = '.pruebas' >>> os.path.splitext(ruta) ('.pruebas', '') # Ruta con varios puntos >>> ruta = 'pruebas.old.txt' >>> os.path.splitext(ruta) ('pruebas.old', '.txt')