🎯 Objetivo de Aprendizaje
Dominar el manejo del sistema de archivos en Python utilizando el módulo moderno pathlib, desarrollando habilidades técnicas para organizar, mover y procesar datos de forma multiplataforma, fomentando el pensamiento lógico, la responsabilidad digital y la atención al detalle, para crear soluciones de software robustas que automaticen tareas cotidianas y resuelvan problemas reales de gestión de información en cualquier entorno operativo.
🌿 Activación: El Caos de la Amazonía
Imagina esta situación: acabas de regresar de una expedición increíble a la Amazonía ecuatoriana. Tu cámara está llena de cientos de fotos: animales, paisajes, ríos. Pero al conectar la cámara a tu computadora, te encuentras con un caos total: todos los archivos están en una sola carpeta, con nombres extraños como IMG_4829.jpg o foto_2026-01-15_001.jpg, mezclados con documentos y notas.
Moverlos uno por uno te tomaría horas. ¿Y si tuvieras que hacer esto con miles de archivos cada semana? Aquí es donde la programación deja de ser solo teoría y se convierte en tu superpoder. En este taller, no solo aprenderás a "leer" archivos; aprenderás a construir un asistente inteligente que organice, clasifique y gestione tu información automáticamente, sin importar si usas Windows, Mac o Linux. ¿Listo para tomar el control de tu sistema de archivos?
🛤️ Desarrollo: Del Caos al Orden
🏙️ La Analogía de la Ciudad
Para entender el sistema de archivos, imagina que tu computadora es una ciudad:
- 🏙️ Tu Ciudad: El disco duro (
C:\o/). - 🏘️ Barrio Usuarios:
C:\Users\o/home/. - 🏠 Casa de Juan:
/Juan/. - 📁 Carpeta Documentos: Donde guardas tus tareas.
- 📄 Archivo:
tarea.py.
Para encontrar tarea.py, necesitas la dirección completa: C:\Users\Juan\Documentos\tarea.py. A esto le llamamos ruta.
📍 Dos Tipos de Rutas
| Tipo | Descripción | Ejemplo | Ventaja / Desventaja |
|---|---|---|---|
| Absoluta | Dirección completa desde la raíz. | C:/Users/Juan/tarea.py |
✅ Siempre funciona. ❌ No sirve en otra PC. |
| Relativa | Desde donde estás parado ahora. | ../fotos/viaje.jpg |
✅ Funciona en cualquier PC. ❌ Depende de tu ubicación actual. |
. = Carpeta actual | .. = Carpeta padre (subir un nivel) | / = Separador de carpetas.
🐍 pathlib: La Forma Moderna
Olvídate del antiguo y confuso os.path. Desde Python 3.4+, pathlib es la herramienta elegante, legible y multiplataforma. Path no es un simple texto (string), es un objeto inteligente que entiende de rutas.
from pathlib import Path
# 1. Importaciones
# 2. Creación de objetos Path
ruta_absoluta = Path("C:/Users/Juan/Documentos/tarea.py")
ruta_relativa = Path("../fotos/viaje.jpg")
ruta_actual = Path("documento.txt")
# 3. Operaciones básicas (Obtener información)
archivo = Path("informe_final.pdf")
print(archivo.name) # "informe_final.pdf" (nombre completo)
print(archivo.stem) # "informe_final" (sin extensión)
print(archivo.suffix) # ".pdf" (extensión)
print(archivo.parent) # Path(".") (carpeta padre)
print(archivo.exists())# True o False
🔍 Navegación y Búsqueda
Explorar carpetas es como usar un mapa. pathlib te da herramientas poderosas:
from pathlib import Path
carpeta = Path(".") # Carpeta actual
# Listar todo el contenido
for item in carpeta.iterdir():
if item.is_file():
print(f"📄 {item.name}")
# Buscar con patrones (glob)
archivos_txt = carpeta.glob("*.txt") # Solo en esta carpeta
archivos_py = carpeta.rglob("*.py") # 🔍 Recursivo: en todas las subcarpetas
glob() busca en el nivel actual. rglob() (recursive glob) busca en el nivel actual y en todas las carpetas hijas.
🏗️ Crear, Mover, Copiar y Eliminar
El operador / es mágico en pathlib: une rutas de forma inteligente, sin importar si estás en Windows o Linux.
from pathlib import Path
import shutil # Necesario para copiar
# 1. Crear carpetas (parents=True crea las intermedias, exist_ok=True evita errores si ya existe)
nueva_carpeta = Path("respaldos/2026/julio")
nueva_carpeta.mkdir(parents=True, exist_ok=True)
# 2. Crear archivo y escribir texto
archivo = nueva_carpeta / "nota.txt" # Operador / mágico
archivo.write_text("Contenido del reporte")
# 3. Mover o Renombrar
archivo.rename(nueva_carpeta / "nota_final.txt")
# 4. Copiar (preservando metadatos)
shutil.copy2(archivo, Path("copia_seguridad.txt"))
# 5. Eliminar (¡CUIDADO! No va a la papelera)
if archivo.exists():
archivo.unlink() # Elimina archivo
🎯 Manos a la Obra: Organizador Automático de Fotos
Vamos a resolver el problema de la Amazonía. Este script lee el nombre de los archivos, extrae la fecha usando expresiones regulares (re) y los mueve a carpetas organizadas por año y mes.
# ==========================================
# IMPORTACIONES
# ==========================================
from pathlib import Path
import shutil
import re
# ==========================================
# VARIABLES DE CONFIGURACIÓN
# ==========================================
CARPETA_ORIGEN = Path("fotos_amazonia")
CARPETA_DESTINO = Path("fotos_organizadas")
# ==========================================
# FUNCIONES
# ==========================================
def extraer_fecha(nombre_archivo):
"""Busca patrones como: foto_2026-01-15_001.jpg"""
patron = r'(\d{4})-(\d{2})-(\d{2})'
coincidencia = re.search(patron, nombre_archivo)
if coincidencia:
return coincidencia.group(1), coincidencia.group(2) # año, mes
return None, None
def organizar_fotos():
if not CARPETA_ORIGEN.exists():
print("❌ No encontré la carpeta de origen")
return
CARPETA_DESTINO.mkdir(exist_ok=True)
nombres_meses = {'01': 'Enero', '07': 'Julio'} # (Simplificado para el ejemplo)
for archivo in CARPETA_ORIGEN.glob("*.jpg"):
año, mes = extraer_fecha(archivo.name)
if año and mes:
nombre_mes = nombres_meses.get(mes, f"Mes_{mes}")
carpeta_destino = CARPETA_DESTINO / año / f"{mes}-{nombre_mes}"
carpeta_destino.mkdir(parents=True, exist_ok=True)
destino_final = carpeta_destino / archivo.name
shutil.move(str(archivo), str(destino_final))
print(f"✅ {archivo.name} → {año}/{nombre_mes}")
else:
print(f"⚠️ {archivo.name} → Sin_Fecha")
# ==========================================
# PROGRAMA PRINCIPAL
# ==========================================
if __name__ == "__main__":
organizar_fotos()
🛡️ Nivel Experto: Metadatos EXIF y Manejo de Errores
Las fotos reales guardan la fecha exacta en sus metadatos EXIF. Usando la librería Pillow (pip install Pillow), podemos leer DateTimeOriginal en lugar de depender del nombre del archivo.
Además, un programador profesional anticipa fallos. Usa bloques try...except para manejar PermissionError (sin permisos) o FileNotFoundError (archivo borrado), evitando que tu programa se bloquee inesperadamente.
enumerate() con glob() para renombrar cientos de archivos secuencialmente (ej: amazonia_001.jpg, amazonia_002.jpg) o usar .with_suffix(".md") para cambiar extensiones masivamente.
🎓 La Conexión con Bases de Datos Reales
Lo que aprendes aquí es la base de la gestión de datos. Observa el paralelismo:
| Concepto en Archivos | Equivalente en Base de Datos |
|---|---|
| Ruta absoluta | Ruta completa a un registro |
| Carpetas | Esquemas o namespaces |
| Archivos | Registros o documentos |
| Extensiones (.jpg, .pdf) | Tipos de datos (BLOB, TEXT, JSON) |
pathlib.Path | Objetos de conexión y cursores |
Buscar con glob() | Consultas con WHERE y LIKE |
Reflexión: Muchas bases de datos no guardan la imagen en sí, sino solo la ruta del archivo en el sistema. ¡Entender rutas es esencial!
🚀 Reto Integrador: "El Guardián de los Datos del Colegio"
Has sido contratado por la secretaría de tu colegio. Tienen una carpeta llamada documentos_desordenados con cientos de archivos PDF y Word de estudiantes, mezclados sin criterio.
Tu misión: Diseña un script en Python que:
- Recorra recursivamente (
rglob) la carpeta de origen. - Lea las primeras líneas de cada archivo de texto (o use el nombre) para detectar si es una "Matrícula", "Calificación" o "Comunicado".
- Cree una estructura de carpetas de destino:
organizados/Tipo_Documento/Año/. - Mueva los archivos de forma segura, manejando errores con
try...except(por ejemplo, si el archivo está abierto por otro programa). - Genere un archivo
reporte_log.txtal final, indicando cuántos archivos se procesaron, cuántos fallaron y la ruta final de cada uno.
pathlib para todas las rutas, incluir comentarios explicativos y no debe fallar si encuentra un archivo inesperado. ¡Demuestra tu pensamiento crítico y ética profesional protegiendo los datos!