Menos repetición, más control

Automatiza una tarea que ya sabes hacer a mano

Empieza por leer y resumir datos; después prueba una copia de archivos con simulación. Tres scripts de la biblioteca estándar con entradas y resultados que puedes verificar.

3 scripts completosArchivos y CSVSimulación antes de copiar

¿Qué tareas puedes automatizar con Python?

Una tarea es buena candidata cuando se repite, tiene reglas estables y permite comprobar el resultado. Leer nombres de archivos, resumir una tabla y copiar documentos nuevos son puntos de partida concretos.

Antes de programar, describe la entrada, la transformación y la salida. Por ejemplo: «leo los archivos directos de una carpeta, cuento su extensión y muestro las cantidades». Esa frase delimita lo que el script debe hacer.

Empieza con una operación de lectura.

Un inventario permite comprobar rutas y resultados sin cambiar los archivos. Para operaciones que escriben, prueba con copias y muestra primero el plan.

Los tres ejemplos utilizan la biblioteca estándar. No requieren pip install. Aprende las bases de archivos y pathlib si todavía no has trabajado con rutas.

Prepara una carpeta de práctica

Crea una carpeta practica-automatizacion con una subcarpeta entrada. Añade archivos de prueba como notas.txt, ideas.txt y ventas.csv. Guarda los scripts junto a entrada.

practica-automatizacion/
├── entrada/
│   ├── notas.txt
│   ├── ideas.txt
│   └── ventas.csv
├── inventario.py
├── resumen_ventas.py
└── copiar.py

Abre la terminal en practica-automatizacion. Ejecuta cada script con python nombre.py en Windows o en un entorno activado; fuera de ese entorno, en macOS y Linux usa python3 nombre.py. Las rutas de los ejemplos son relativas a esa carpeta actual.

El editor online utiliza un sistema de archivos del navegador. Estos scripts están pensados para tu equipo; el ejemplo de gastos de proyectos para principiantes sí se ejecuta completo sin archivos externos.

Automatización 01 · Solo lectura

Cuenta archivos por extensión

Este script recorre los hijos directos de entrada. Ignora directorios y enlaces simbólicos, normaliza las extensiones a minúsculas y asigna una etiqueta a los archivos sin extensión.

inventario.py
from collections import Counter
from pathlib import Path

carpeta = Path("entrada")
if not carpeta.is_dir():
    raise SystemExit("Crea la carpeta entrada antes de ejecutar")

conteo = Counter()
for archivo in carpeta.iterdir():
    if archivo.is_symlink() or not archivo.is_file():
        continue
    extension = archivo.suffix.lower() or "(sin extensión)"
    conteo[extension] += 1

if not conteo:
    print("No hay archivos para contar")
for extension, cantidad in sorted(conteo.items()):
    print(f"{extension}: {cantidad}")
Resultado para la carpeta del ejemplo
.csv: 1
.txt: 2

Comprueba: añade LEEME.TXT; el contador de .txt debe subir a tres. Una subcarpeta no aumenta el recuento. La última extensión de archivo.tar.gz es .gz en este contrato.

Automatización 02 · Leer, agrupar y resumir

Genera un resumen de ventas desde CSV

Guarda el siguiente contenido en entrada/ventas.csv con codificación UTF-8. En este ejemplo se usa coma como separador y punto para los decimales.

entrada/ventas.csv
producto,importe
Cuaderno,12.50
Bolígrafo,3.20
Cuaderno,7.30

DictReader interpreta la primera fila como nombres de columnas. El script valida esas columnas, convierte los importes a Decimal y agrupa las filas por producto. Informa del número de línea cuando un registro no cumple el formato.

resumen_ventas.py
import csv
from decimal import Decimal, InvalidOperation
from pathlib import Path

ruta = Path("entrada/ventas.csv")
totales = {}
try:
    with ruta.open(encoding="utf-8-sig", newline="") as archivo:
        lector = csv.DictReader(archivo)
        if lector.fieldnames != ["producto", "importe"]:
            raise ValueError("Cabecera esperada: producto,importe")
        for fila in lector:
            linea = lector.line_num
            producto = (fila.get("producto") or "").strip()
            try:
                importe = Decimal(fila.get("importe") or "")
            except InvalidOperation:
                raise ValueError(f"Importe inválido en línea {linea}") from None
            if not producto or not importe.is_finite() or importe < 0:
                raise ValueError(f"Dato inválido en línea {linea}")
            if importe.as_tuple().exponent < -2:
                raise ValueError(f"Máximo dos decimales en línea {linea}")
            totales[producto] = totales.get(producto, Decimal("0.00")) + importe
except (OSError, ValueError) as error:
    raise SystemExit(f"No se pudo resumir el CSV: {error}") from None

if not totales:
    print("No hay ventas para resumir")
for producto, importe in sorted(totales.items()):
    print(f"{producto}: {importe:.2f}")
print(f"TOTAL: {sum(totales.values(), Decimal('0.00')):.2f}")
Resultado esperado
Bolígrafo: 3.20
Cuaderno: 19.80
TOTAL: 23.00

Comprueba: cambia un importe por abc y revisa el mensaje. Si tu archivo real usa punto y coma, configura delimiter=";" y adapta la cabecera. No sustituyas comas indiscriminadamente: también pueden aparecer dentro de campos entrecomillados.

Profundiza en la lección de CSV en Python.

Automatización 03 · Escribir con un plan visible

Copia archivos nuevos con un modo de simulación

La primera ejecución muestra qué copiaría desde entrada a copia. Solo procesa archivos directos, omite enlaces simbólicos y salta los nombres que ya existen en el destino.

copiar.py · empieza con SIMULAR = True
from pathlib import Path
import shutil

SIMULAR = True
origen = Path("entrada")
destino = Path("copia")

if not origen.is_dir():
    raise SystemExit("No existe la carpeta entrada")
if origen.resolve() == destino.resolve():
    raise SystemExit("Origen y destino deben ser diferentes")
if destino.is_symlink():
    raise SystemExit("El destino no puede ser un enlace simbólico")
if destino.exists() and not destino.is_dir():
    raise SystemExit("El destino existe y no es una carpeta")
if not SIMULAR:
    destino.mkdir(parents=True, exist_ok=True)

for archivo in sorted(origen.iterdir()):
    if archivo.is_symlink() or not archivo.is_file():
        continue
    objetivo = destino / archivo.name
    if objetivo.exists() or objetivo.is_symlink():
        print(f"Omitido: {archivo.name} (ya existe)")
        continue
    if SIMULAR:
        print(f"Copiaría: {archivo.name}")
    else:
        try:
            with archivo.open("rb") as entrada:
                with objetivo.open("xb") as salida:
                    shutil.copyfileobj(entrada, salida)
        except FileExistsError:
            print(f"Omitido: {archivo.name} (ya existe)")
        else:
            print(f"Copiado: {archivo.name}")

Revisa el plan y cambia SIMULAR a False cuando quieras copiar los archivos de prueba. El modo xb crea el archivo solo si no existe; así evita reemplazar un destino que aparezca después de la comprobación.

Comprueba: la simulación no crea copia. La primera copia crea los archivos. Una segunda ejecución los omite. Este ejemplo copia contenido, no conserva todos los metadatos y no actualiza archivos modificados: es una práctica de copia, no un sistema completo de respaldo.

Si una ejecución se interrumpe, puede quedar una copia incompleta. Verifica tamaños o contenido antes de darla por buena; la versión inicial no repara archivos parciales.

Antes de programar ejecuciones automáticas

  • Prueba la tarea manualmente con la carpeta de práctica.
  • Ejecuta el script dos veces y explica qué cambia en la segunda.
  • Decide qué debe ocurrir con datos inválidos y archivos existentes.
  • Usa rutas explícitas cuando lo ejecutes desde otra carpeta.
  • Conserva un resumen de lo procesado y lo omitido.

Cuando el script sea fiable, puedes investigar el programador de tareas de tu sistema. La planificación depende de tu equipo; estos ejemplos se ejecutan manualmente para que puedas observar cada resultado.

Preguntas frecuentes sobre automatizar tareas

¿Necesito instalar librerías para estos scripts?

No. pathlib, csv, decimal, collections y shutil forman parte de la biblioteca estándar de Python. Los ejemplos no necesitan dependencias externas.

¿Por qué no usar el editor online para mis carpetas?

Las rutas del editor corresponden a su entorno en el navegador y no a las carpetas de tu equipo. Ejecuta los scripts localmente si necesitas acceder a tus archivos.

¿Puedo automatizar hojas de Excel con el ejemplo CSV?

El script procesa texto CSV, no archivos .xlsx ni sus fórmulas o formatos. Puedes exportar una tabla a CSV y comprobar sus separadores, cabeceras y decimales antes de procesarla.

Mejora la lógica antes de ampliar el flujo

Separa cada transformación en una función y comprueba sus entradas y retornos.

Practicar funciones →

Fuentes y compatibilidad

Los ejemplos usan Python 3 y la biblioteca estándar. Las instrucciones de instalación se contrastaron con la documentación oficial; los ejemplos de código se verifican con las comprobaciones de estas guías.

Consulta la metodología y las versiones del editor.