Cómo organizar archivos del PC automáticamente con Python

Actualizado el: 11/07/2026
Tempo de leitura: 4 minutos
Automação em Python para organizar arquivos do computador

Organizar automáticamente los archivos del ordenador es uno de los proyectos más útiles para practicar Python. Un script puede observar una carpeta, clasificar documentos por extensión, crear directorios, evitar nombres duplicados y registrar cada movimiento. La meta no es mover archivos a ciegas, sino construir una automatización predecible, reversible y segura.

Para ampliar conceptos, consulta las guías sobre archivos de texto, copiar y mover con shutil, manejo de excepciones, logging y ejecutar scripts al iniciar Windows. Como referencias externas, revisa la documentación oficial de pathlib y la documentación oficial de shutil.

Definir reglas antes de mover archivos

Empieza con un mapa explícito. Las extensiones deben estar en minúsculas y cada categoría debe tener un destino claro. Los archivos desconocidos pueden permanecer donde están o ir a una carpeta separada.

CATEGORIAS = {
    ".pdf": "Documentos",
    ".docx": "Documentos",
    ".xlsx": "Planillas",
    ".jpg": "Imagenes",
    ".jpeg": "Imagenes",
    ".png": "Imagenes",
    ".mp4": "Videos",
    ".zip": "Comprimidos",
}

Una regla visible es más fácil de revisar que una cadena extensa de condiciones.

Recorrer la carpeta con pathlib

from pathlib import Path

ORIGEN = Path.home() / "Downloads"

for ruta in ORIGEN.iterdir():
    if ruta.is_file():
        print(ruta.name, ruta.suffix.lower())

iterdir() inspecciona únicamente el nivel actual. Es una buena opción para Descargas. Utiliza rglob() solo cuando realmente deseas recorrer subcarpetas.

Crear destinos automáticamente

categoria = CATEGORIAS.get(ruta.suffix.lower(), "Otros")
destino_carpeta = ORIGEN / categoria
destino_carpeta.mkdir(parents=True, exist_ok=True)

exist_ok=True permite ejecutar el script varias veces. Mantén todas las carpetas dentro de un directorio autorizado para no dispersar datos accidentalmente.

Mover un archivo

from shutil import move

destino = destino_carpeta / ruta.name
move(str(ruta), str(destino))

Antes de mover, confirma que el origen todavía exista. Otro programa podría estar descargando o modificando el archivo mientras el script trabaja.

Evitar sobrescrituras

Dos archivos pueden tener el mismo nombre. Nunca reemplaces silenciosamente. Genera un nombre disponible añadiendo un contador.

def destino_disponible(carpeta, nombre):
    candidato = carpeta / nombre
    if not candidato.exists():
        return candidato

    base = candidato.stem
    extension = candidato.suffix
    contador = 1

    while True:
        candidato = carpeta / f"{base}-{contador}{extension}"
        if not candidato.exists():
            return candidato
        contador += 1

Modo simulación

Todo organizador debería ofrecer un modo que muestre las acciones sin aplicarlas. Es la mejor defensa contra reglas equivocadas.

SIMULAR = True

if SIMULAR:
    print(f"MOVER: {ruta} -> {destino}")
else:
    move(ruta, destino)

Ejecuta primero la simulación, revisa una muestra y habilita los cambios únicamente cuando el resultado sea correcto.

Ignorar archivos temporales

Los navegadores crean archivos parciales como .crdownload o .part. También puede haber documentos ocultos, bloqueados o con tamaño cero. Exclúyelos hasta que estén completos. Una estrategia adicional es ignorar archivos modificados durante los últimos minutos.

import time

edad = time.time() - ruta.stat().st_mtime
if edad < 120:
    continue

Clasificar por fecha

Además de extensión, puedes crear carpetas por año y mes. Utiliza la fecha de modificación, entendiendo que puede cambiar al copiar.

from datetime import datetime

fecha = datetime.fromtimestamp(ruta.stat().st_mtime)
carpeta = ORIGEN / f"{fecha.year:04d}" / f"{fecha.month:02d}"

No combines demasiadas reglas en la primera versión. Una estructura excesivamente profunda dificulta encontrar documentos.

Registrar cada acción

import logging

logging.basicConfig(
    filename="organizador.log",
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s",
)

logging.info("Movido %s a %s", ruta, destino)

El log permite auditar y revertir acciones. No registres contenido privado; las rutas suelen ser suficientes.

Archivo de historial para deshacer

Guarda origen, destino y fecha en JSONL o CSV. Una función de reversión puede leer las entradas en orden inverso y devolver los archivos, siempre que no exista un archivo nuevo en la ubicación original. Si hay conflicto, detente y solicita intervención.

Configuración externa

Cuando las reglas crecen, colócalas en JSON. Así puedes añadir extensiones sin editar el código. Valida que los nombres de carpetas no contengan rutas absolutas ni secuencias que salgan del directorio permitido.

Manejo de excepciones

try:
    move(ruta, destino)
except PermissionError:
    logging.exception("Sin permiso para mover %s", ruta)
except FileNotFoundError:
    logging.warning("El archivo desapareció: %s", ruta)
except OSError:
    logging.exception("Error del sistema al mover %s", ruta)

Captura errores por archivo para que un problema no detenga todo el lote. Al final, muestra un resumen de éxitos, omitidos y fallos.

Programar la ejecución

En Windows utiliza el Programador de tareas; en Linux y macOS puedes usar cron o un servicio del sistema. Es preferible ejecutar cada cierto tiempo a mantener un bucle infinito. Configura el directorio de trabajo y usa rutas absolutas, porque los programadores de tareas no siempre comienzan en la carpeta del script.

Seguridad

No organices automáticamente carpetas del sistema, repositorios, aplicaciones o directorios sincronizados sin pruebas. Evita seguir enlaces simbólicos hacia ubicaciones inesperadas. Mantén una lista de carpetas permitidas y rechaza cualquier destino que quede fuera de ellas.

Pruebas

Crea una carpeta temporal con archivos duplicados, nombres Unicode, extensiones en mayúsculas, archivos sin extensión, subcarpetas y elementos bloqueados. Comprueba que la segunda ejecución no cambie nada: una automatización idempotente es más fácil de confiar.

Errores frecuentes

Los errores habituales son sobrescribir archivos, mover descargas incompletas, procesar la carpeta de destino nuevamente, depender de rutas relativas y ejecutar sin simulación. También es común clasificar únicamente por extensión y olvidar que una extensión puede ser incorrecta o engañosa.

Conclusión

Un buen organizador no se limita a mover archivos. Define reglas legibles, crea destinos controlados, evita colisiones, registra acciones y ofrece simulación y reversión. Empieza con una sola carpeta y pocas extensiones. Después de probar con datos reales, programa la ejecución y amplía las reglas de manera gradual.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Web scraper de notícias em Python com envio para Telegram
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un scraper de noticias y enviarlas a Telegram con Python

    Crea un scraper de noticias con Requests y Beautiful Soup, elimina duplicados y envía titulares a Telegram de forma segura

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Logos do Python e Excel lado a lado representando a importação de dados do Excel para Python.
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo importar datos de Excel en Python con Pandas

    Importa Excel con Pandas y openpyxl: selecciona hojas y columnas, convierte fechas y números, valida el esquema y exporta datos

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Compactação de arquivos ZIP usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo descomprimir archivos ZIP con Python de forma segura

    Descomprime archivos ZIP con Python de forma segura: valida rutas, evita Zip Slip, limita tamaños, verifica integridad y procesa archivos

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Python e ícone de e-mail sobre teclado de notebook
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo automatizar correos electrónicos con Python

    Automatiza correos con Python usando EmailMessage y smtplib: texto, HTML, adjuntos, TLS, variables de entorno, reintentos y prevención de duplicados.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Acesso e edição de Google Sheets com Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo acceder y editar Google Sheets con Python

    Accede y edita Google Sheets con Python y gspread: autenticación, lectura, escritura por lotes, validación, permisos, reintentos y seguridad.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Automação de mensagens no WhatsApp usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un bot de WhatsApp con Python de forma responsable

    Crea un bot de WhatsApp con Python usando PyWhatKit o la Cloud API oficial, con validación, seguridad, colas, pruebas y

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026