Cómo obtener nombres de archivos en Python: Guía completa con os y pathlib

1. Introducción

Python es extremadamente flexible en lo que respecta a la manipulación de archivos y permite automatizar muchas tareas con código sencillo. En este artículo se presentan varios métodos para “obtener nombres de archivos” usando Python. En particular, se explican los módulos de la biblioteca estándar os y pathlib. Al leer este artículo, adquirirás las habilidades necesarias para manipular eficientemente los archivos de un directorio y crear scripts que obtengan o filtren nombres de archivos.

2. Conceptos básicos para obtener nombres de archivos en Python

Comencemos con los métodos básicos para obtener nombres de archivos en Python. Con la función os.path.basename() se puede obtener el nombre del archivo a partir de una ruta específica.

2.1 Cómo usar os.path.basename()

os.path.basename() es una función que extrae únicamente el nombre del archivo desde una ruta completa. En el siguiente ejemplo se muestra cómo obtener el nombre del archivo desde la ruta:
import os

file_path = "/user/home/document/file.txt"
file_name = os.path.basename(file_path)
print(file_name)  # Resultado: "file.txt"

2.2 Obtener el nombre del directorio con os.path.dirname()

De manera similar, os.path.dirname() permite obtener el nombre del directorio desde una ruta de archivo. Así es posible separar el nombre del archivo y el directorio.
dir_name = os.path.dirname(file_path)
print(dir_name)  # Resultado: "/user/home/document"

3. Obtener todos los nombres de archivos en un directorio

Para obtener en forma de lista todos los archivos y carpetas en un directorio, os.listdir() resulta útil. Además, para obtener archivos en subdirectorios de forma recursiva, se puede usar os.walk().

3.1 Obtener nombres de archivos con os.listdir()

Con os.listdir() se obtiene una lista con todos los archivos y carpetas de un directorio específico. Es ideal para operaciones simples.
import os

dir_path = "/user/home/document"
files = os.listdir(dir_path)
print(files)  # Resultado: ["file1.txt", "file2.txt", "subfolder"]

3.2 Obtener nombres de archivos recursivamente con os.walk()

Si deseas obtener archivos de forma recursiva incluyendo subdirectorios, os.walk() es la opción más efectiva. El siguiente código lista todos los archivos del directorio y sus subdirectorios:
import os

dir_path = "/user/home/document"
for root, dirs, files in os.walk(dir_path):
    for file in files:
        print(os.path.join(root, file))

3.3 Añadir manejo de errores

Si el directorio no existe o no se tienen permisos, pueden generarse errores. Por ello, se recomienda agregar manejo de excepciones con try-except:
dir_path = "/invalid/path"
try:
    files = os.listdir(dir_path)
    print(files)
except FileNotFoundError:
    print(f"{dir_path} no se encuentra.")

4. Obtener y cambiar extensiones

Al obtener nombres de archivos, en ocasiones es necesario manipular sus extensiones. Con os.path.splitext() es posible separarlas o modificarlas.

4.1 Obtener extensiones con os.path.splitext()

os.path.splitext() devuelve el nombre del archivo y su extensión por separado.
import os

file_path = "/user/home/document/file.txt"
file_name, file_ext = os.path.splitext(file_path)
print(file_name)  # Resultado: "/user/home/document/file"
print(file_ext)   # Resultado: ".txt"

4.2 Cambiar extensiones

Para cambiar la extensión, basta con añadir la nueva extensión al nombre obtenido con os.path.splitext():
new_file_path = file_name + ".jpg"
print(new_file_path)  # Resultado: "/user/home/document/file.jpg"
年収訴求

5. Uso avanzado del módulo pathlib para obtener nombres de archivos

Desde Python 3.4, el módulo pathlib es muy útil para trabajar con rutas de archivos. Este permite manipular rutas de manera orientada a objetos y más intuitiva.

5.1 Obtener nombres de archivos con Path.iterdir()

Con el método iterdir() de pathlib.Path() se obtienen los nombres de archivos y carpetas de un directorio:
from pathlib import Path

dir_path = Path("/user/home/document")
for item in dir_path.iterdir():
    print(item.name)

5.2 Obtención recursiva de archivos con rglob()

Si necesitas obtener nombres de archivos recursivamente incluyendo subdirectorios, rglob() es ideal. También puede usarse como alternativa a os.walk():
for file in dir_path.rglob("*"):
    print(file)

6. Filtrar nombres de archivos

Cuando se desea obtener solo nombres de archivos que cumplan ciertas condiciones, es posible filtrarlos con el módulo glob o con el método glob() de pathlib.

6.1 Filtrar por extensión

Para obtener solo archivos con una extensión específica, se utiliza el comodín *:
from pathlib import Path

dir_path = Path("/user/home/document")
for file in dir_path.glob("*.txt"):
    print(file)
Este código obtiene únicamente los archivos .txt dentro del directorio especificado.

7. Conclusión

Existen múltiples formas de obtener nombres de archivos con Python, y lo más importante es elegir el método adecuado según la necesidad. Combinando las operaciones básicas del módulo os con las funciones avanzadas de pathlib, podrás manejar directorios y archivos de manera eficiente. En la próxima entrega, exploraremos tareas relacionadas como renombrar, mover y eliminar archivos.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール