Introducción a pathlib — Manejo de rutas orientado a objetos

Al trabajar con Python, es muy común manejar rutas de archivos o directorios. Esto es algo que hacemos a diario, ya sea para guardar registros, leer y escribir archivos de configuración o organizar archivos de datos. Anteriormente, gestionábamos estas tareas mezclando módulos como os.path, glob y shutil, pero ya no es necesario. ¿Por qué?

Porque existe pathlib.

¿Qué es pathlib?

pathlib es un módulo orientado a objetos para el manejo de rutas que apareció en Python 3.4. Antes, administrábamos las rutas de archivos como simples cadenas de texto, pero pathlib trata "la ruta misma" como un objeto. Esto hace que conectar rutas, verificar su existencia y realizar lecturas y escrituras de archivos sea mucho más claro y fácil de leer.

from pathlib import Path

▶ Esta clase Path funciona automáticamente como PosixPath (macOS/Linux) o WindowsPath dependiendo de tu sistema operativo. ¡No tienes que preocuparte por qué SO estás usando!


Funciones esenciales de pathlib y ejemplos

1. Creación de objetos de ruta

p = Path('data/example.txt')
print(p.resolve())  # Devuelve la ruta absoluta

Parece una cadena, pero esto es un objeto. Puedes manejar la ruta de manera flexible a través de diversos métodos y atributos.

2. Combinación de rutas: Uso del operador /

data_dir = Path('data')
file_path = data_dir / 'sample.txt'

Es muy Pythonic poder combinar rutas usando el operador de barra /. Es más legible y seguro que la concatenación de cadenas.

3. Extracción de información de la ruta

Es muy conveniente poder separar componentes de la ruta como el directorio padre, el nombre y la extensión.

p = Path('data/sample.txt')
print(p.parent)   # data
print(p.name)     # sample.txt
print(p.stem)     # sample
print(p.suffix)   # .txt

4. Verificación de existencia

Devuelve el resultado como un booleano.

p.exists()     # Verifica existencia
p.is_file()    # ¿Es un archivo?
p.is_dir()     # ¿Es un directorio?

5. Creación de directorios

p = Path('logs/2025/05')
p.mkdir(parents=True, exist_ok=True)

Puedes crear directorios anidados de una sola vez, y no habrá error si ya existen.

6. Lectura y escritura de archivos

p = Path('output.txt')
p.write_text("¡Hola, Mundo!")

text = p.read_text()
print(text)

También puedes manejar archivos binarios:

p.write_bytes(b'datos binarios')
data = p.read_bytes()

7. Búsqueda de archivos/directorios

print(list(Path('.').glob('*.py')))      # Lista de archivos .py en la carpeta actual
print(list(Path('.').rglob('*.py')))     # Búsqueda recursiva hasta subcarpetas

glob() devuelve un generador, así que es mejor convertirlo a una lista para verificar.

8. Eliminación, movimiento y renombrado de archivos

p.unlink()           # Eliminar
p.rename('nuevo_nombre')  # Cambiar nombre (mismo directorio)
p.replace('nuevopath') # Mover y sobrescribir

Ten en cuenta que rename() puede fallar si el camino de destino ya existe, así que usa replace() si necesitas sobrescribir. Para copias, debes usar shutil.copy().


Comparación de os.path vs pathlib

# os.path
import os
os.path.exists('foo/bar.txt')

# pathlib
Path('foo/bar.txt').exists()
  • El código es mucho más legible y más limpio.
  • Particularmente, su estructura de sintaxis es similar a comandos que se usan comúnmente en entornos Linux como cd, ls, mkdir.

¿Por qué deberíamos usar pathlib?

  • El código se vuelve estructurado al usar objetos Path en lugar de cadenas.
  • Manejo de rutas independiente del sistema operativo (Windows vs POSIX)
  • Integra las funcionalidades de os.path, glob, y shutil
  • Mejora la mantenibilidad en pruebas, registros y manejo de errores

Tux ensamblando bloques de rutas en una camiseta de Python

Conclusión

Así como Counter y defaultdict han hecho más elegante el manejo de colecciones, pathlib transforma completamente la forma en que trabajamos con rutas de archivos. Ya puedes olvidar los difíciles días de manejar cadenas. Prueba ejecutar los ejemplos que te he mostrado en este artículo, te familiarizarás más rápido de lo que piensas.

En la próxima entrega, planeo abordar técnicas avanzadas para automatizar la copia/respaldo de archivos usando shutil. ¡No te lo pierdas!

Para ver el artículo anterior, puedes hacer clic en el siguiente enlace.

Guía de collections.Counter en la biblioteca estándar de Python

Guía de collections.defaultdict en la biblioteca estándar de Python