Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

El Archivista Digital (pathlib)

Árbol de directorios: RAÍZ → CARPETA → CARPETA → ARCHIVO.PY: la ruta completa aparece como proyecto/datos/inventario.py

Fig. 11.2: Una ruta recorre el árbol de directorios.

Piénsalo así: en un almacén gigante, localizar una caja específica sin ayuda es una pérdida de tiempo. Necesitas un archivista que sepa leer cualquier dirección y decirte exactamente dónde está cada cosa. Ese es el trabajo de pathlib: sus Rutas de Archivo (Path) son las fichas que el Archivista Digital usa para ubicar todo. Sin ellas, tu código busca a ciegas.

Escribir rutas a mano era un desastre. Windows usa \, Linux y macOS usan /, y cualquier ruta escrita a mano como cadena se rompía al cambiar de sistema. pathlib resuelve eso de raíz: es la forma sensata de escribir rutas que funcionen en cualquier sistema, sin que tú tengas que pensar en cuál es.

Rutas Inteligentes

En lugar de concatenar cadenas con barras, creamos objetos Path.

from pathlib import Path

# 1. Definimos nuestro punto de partida (Current Working Directory)
base = Path.cwd()

# 2. Construimos la ruta al destino
# El operador '/' conecta carpetas de forma inteligente
carpeta_datos = base / "inventario" / "2025"
archivo_objetivo = carpeta_datos / "reporte.csv"

El Archivista Contesta sin Abrir la Caja

Un objeto Path es una descripción de una ubicación, no la cosa en sí: puede describir un archivo que ni siquiera existe todavía. Preguntas como .name, .suffix o .parent se responden leyendo el texto de la ruta, nunca tocan el disco; comprobar si de verdad existe con .exists() sí lo toca, aunque sea sin abrir el archivo. Eso ya es útil de por sí.

from pathlib import Path

archivo = Path("mi_foto.jpg")

# ¿Existe?
if archivo.exists():
    print("¡El archivo está ahí!")

# Datos del archivo
print(archivo.name)    # "mi_foto.jpg"
print(archivo.suffix)  # ".jpg" (La extensión)
print(archivo.parent)  # La carpeta donde vive

Construir, Recorrer, Retirar

El Archivista no solo describe ubicaciones: también actúa sobre el terreno cuando tú se lo pides. A diferencia de .suffix o .parent, estos tres verbos sí tocan el disco de verdad:

from pathlib import Path

bodega = Path("bodega_2025")

# Construir el pasillo (la carpeta), sin protestar si ya existe
bodega.mkdir(exist_ok=True)

# Dejar un archivo dentro
(bodega / "manifiesto.txt").write_text("Turno 1: 40 tarimas", encoding="utf-8")

# Recorrer el pasillo completo
for elemento in bodega.iterdir():
    print(elemento.name)          # manifiesto.txt

# Buscar por patrón: solo los .txt
for reporte in bodega.glob("*.txt"):
    print(reporte)                # bodega_2025/manifiesto.txt

# Retirar la caja (borrar el archivo) y desmontar el pasillo vacío
(bodega / "manifiesto.txt").unlink()
bodega.rmdir()

(Ojo: en la edición web esa carpeta y ese archivo solo existen en la memoria del navegador; para que aparezcan en tu disco de verdad, corre el código en tu terminal.)

mkdir(exist_ok=True) construye; iterdir() recorre todo; glob("*.txt") trae solo lo que coincide con el patrón; .unlink() retira un archivo y rmdir() desmonta una carpeta ya vacía. Junto con exists() de la sección anterior, es todo lo que el proyecto final necesita del archivista.

Usar pathlib en lugar de cadenas manuales no es solo una buena práctica; es lo que separa el código que funciona en una máquina del código que funciona en todas.