CodeForge

Python de Cero a Experto / Ruta scripting

Un script que organiza carpetas

Teoría22 min20 XP

Hora de tu primer script de automatización REAL: un organizador que toma una carpeta llena de archivos desordenados y los clasifica en subcarpetas según su tipo (imágenes, documentos, música), todo de una pasada. Es el clásico "ordena mi carpeta de descargas" —una tarea que a mano toma media hora y que un script resuelve en un segundo—. Juntas todo lo de la lección anterior en una herramienta útil de verdad.

La recepcionista que clasifica el correo

El organizador completo

Este script crea una carpeta desordenada de ejemplo y la organiza clasificando cada archivo por su extensión:

El script recorre cada archivo, busca su extensión en el mapa DESTINOS, crea la carpeta destino si no existe, y mueve el archivo ahí —contando los movidos y apartando los de extensión desconocida—. Dos detalles clave de un buen script de automatización: tomar una "foto" de los archivos antes de moverlos (list(Path(".").glob("*"))) para no confundir el recorrido al modificar la carpeta durante el bucle; y manejar los casos borde (archivos sin categoría, que se reportan en vez de perderse). En un segundo hace lo que a mano sería tedioso.

¿Por qué el script usa list(Path('.').glob('*')) en vez de recorrer el glob directamente al mover archivos?

Mini-reto

Amplía el organizador: 1) agrega una categoría más al mapa DESTINOS (por ejemplo videos .mp4/.mov"Videos"); 2) en vez de mover los archivos sin categoría, muévelos a una carpeta "Otros"; 3) agrega al reporte el TAMAÑO total (en bytes) de los archivos de cada carpeta (suma f.stat().st_size). Bonus: agrega un "modo simulación" con una variable SIMULAR = True que, si está activa, solo IMPRIMA lo que haría sin mover nada realmente.

Qué sigue

Ya automatizas el sistema de archivos local. La próxima lección sale a INTERNET: la librería requests para hacer peticiones HTTP —descargar datos de una API o una página web desde tu script—. El primer paso para scripts que interactúan con el mundo en línea.