Scripts en Python para optimizar tu productividad semanal
Scripts en Python que te ahorran horas cada semana (Casos reales)
Tiempo estimado de lectura: 4 min
- Automatiza lo repetitivo: pequeñas tareas con scripts te devuelven horas cada semana.
- Enfoque pragmático: ejemplos listos para copiar, adaptar y ejecutar hoy mismo.
- Integración: combina Python con n8n o FastAPI para orquestación sin perder flexibilidad.
- Producción segura: logging, retries, timeouts, tests y entornos reproducibles como pasos mínimos.
Introducción
Si buscas “Scripts en Python que te ahorran horas cada semana (casos reales)”, estás en el lugar correcto. En las primeras líneas: este artículo muestra scripts prácticos —limpieza de datos, renombrado masivo, scraping controlado y generación de informes— que puedes copiar, adaptar y ejecutar hoy mismo para recuperar horas semanales.
No es teoría: son patrones productivos con código mínimo, buenas prácticas y enlaces a la documentación oficial para escalar a producción.
Resumen rápido (lectores con prisa)
Qué es: Colección de scripts Python prácticos para tareas repetitivas.
Cuándo usarlo: Cuando procesos manuales consumen tiempo semanalmente.
Por qué importa: Scripts reproducibles reducen errores humanos y liberan tiempo.
Cómo funciona: Pequeños scripts con dependencias claras, logging y orquestación via n8n o FastAPI.
Scripts en Python que te ahorran horas cada semana: cuatro casos reales
1) Limpieza y normalización de datos (Pandas)
Problema: CSVs semanales con fechas mixtas, espacios, duplicados. Resultado: 30 minutos manuales por archivo.
Solución: usar pandas para normalizar columnas, coercionar fechas y eliminar duplicados. Dependencias: pandas.
import pandas as pd
def clean_sales(input_path, output_path):
df = pd.read_csv(input_path)
df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_')
if 'fecha_venta' in df:
df['fecha_venta'] = pd.to_datetime(df['fecha_venta'], errors='coerce').dt.date
df.drop_duplicates(subset=['email'], inplace=True)
df.dropna(subset=['monto', 'email'], inplace=True)
df.to_csv(output_path, index=False)
Por qué funciona: debug determinista, reproducible y scriptable desde cron o n8n.
2) Renombrado y organización masiva de archivos (Pathlib)
Problema: carpeta Downloads repleta de facturas, imágenes y PDFs sin orden.
Solución: Pathlib + shutil para mover por fecha de modificación o por patrón. Pathlib docs.
from pathlib import Path
import shutil
from datetime import datetime
src = Path.home() / "Downloads"
dst = Path.home() / "Documents/Invoices"
for f in src.glob("*.pdf"):
ts = datetime.fromtimestamp(f.stat().st_mtime)
target = dst / str(ts.year) / f"{ts.month:02d}"
target.mkdir(parents=True, exist_ok=True)
shutil.move(str(f), str(target / f.name))
Impacto: cientos de archivos organizados en segundos, sin errores humanos.
3) Scraping controlado y monitoreo (Requests + BeautifulSoup)
Problema: comprobar precios o disponibilidad manualmente cada mañana.
Solución: Requests + BeautifulSoup para sitios estáticos. Respecta robots.txt y usa headers.
import requests
from bs4 import BeautifulSoup
url = "https://ejemplo.com/producto"
headers = {"User-Agent": "bot@miempresa.com"}
r = requests.get(url, headers=headers, timeout=10)
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
price = soup.select_one(".price").get_text(strip=True)
Cuando la web es dinámica, usa Playwright.
Buenas prácticas: backoff en reintentos, pausas entre requests y registro estructurado.
4) Generación automática de informes (Jinja2 → Email/HTML/PDF)
Problema: compilar métricas de distintas fuentes y formatearlas manualmente cada semana.
Solución: Jinja2 para plantilla HTML + render + envío por SMTP o vía n8n. Jinja2 docs.
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader("templates"))
tpl = env.get_template("weekly.html")
html = tpl.render(metrics=metrics_dict)
Patrón:
- Recoger datos (DB / API)
- Renderizar plantilla Jinja2
- Guardar HTML o convertir a PDF (weasyprint / wkhtmltopdf)
- Enviar por correo o subir a un canal Slack
Automatización: conviértelo en endpoint FastAPI o ejecútalo desde n8n.
Cómo convertir un script útil en una automatización confiable
- Logging estructurado: usa logging/structlog, evita prints.
- Configuración externa: variables de entorno (.env), no claves hardcodeadas.
- Retries y backoff: tenacity o patrones de retry para redes inestables.
- Timeouts y cancelación: define límites en requests/Playwright.
- Tests y tipo: type hints + pytest para evitar regresiones.
- Entornos reproducibles: poetry/venv y Dockerfile.
- Observabilidad: métricas de ejecución y alertas (errores, latencias).
Integración práctica con n8n y workflow orquestado
Patrón recomendado: n8n orquesta (triggering, branching, notificaciones) → tu servicio Python ejecuta la tarea pesada → devuelve JSON → n8n sigue con distribución y persistencia. Esto mantiene la UX del no-code y la potencia de Python para lo que importa.
n8n Execute Command o un endpoint HTTP (FastAPI) son las formas más sencillas de integrar.
Conclusión: dónde empezar hoy
Elige la tarea que te roba más tiempo y conviértela en script. Empieza por:
- limpieza de datos si trabajas con CSVs;
- organización de archivos si pierdes tiempo buscando;
- scraping si haces comprobaciones manuales diarias;
- reportes si dedicas horas a consolidar métricas.
Implementa logging, pruebas mínimas y despliega como función serverless o servicio ligero. Un script que hoy te ahorre 30 minutos semanales será un activo que multiplica su valor con el tiempo.
Recursos
Si trabajas con automatización, n8n o workflows y quieres continuar experimentando con patrones y pruebas, visita Dominicode Labs para recursos adicionales y experimentos prácticos. Es una continuación lógica para quienes combinan no-code y código en producción.
FAQ
- ¿Qué dependencias necesito?
- ¿Cómo integrarlo con n8n?
- ¿Qué pruebas debo escribir?
- ¿Cómo manejar secretos y configuración?
- ¿Qué hacer si el scraping requiere JS?
- ¿Cómo convertir HTML a PDF?
¿Qué dependencias necesito?
Depende de la tarea: para limpieza de datos, pandas. Para scraping estático, Requests y BeautifulSoup. Para render dinámico, Playwright. Para plantillas, Jinja2.
¿Cómo integrarlo con n8n?
Usa n8n como orquestador: trigger → ejecutar comando → recibir JSON. Puedes usar Execute Command o un endpoint HTTP (FastAPI) que reciba peticiones desde n8n y devuelva resultados procesables.
¿Qué pruebas debo escribir?
Tests unitarios básicos con pytest y pruebas de integración para las interacciones de red o filesystem. Añade type hints y pruebas que cubran casos esperados y errores comunes (fechas inválidas, campos faltantes, timeouts).
¿Cómo manejar secretos y configuración?
Usa variables de entorno, managers de secretos o servicios de vault. Nunca hardcodees claves en el repositorio; utiliza .env para desarrollo y soluciones seguras en producción.
¿Qué hacer si el scraping requiere JS?
Pasa a herramientas headless como Playwright o Puppeteer. Define timeouts, espera selectores y respetar robots.txt y límites de requests.
¿Cómo convertir HTML a PDF?
Renderiza tu plantilla Jinja2 a HTML y usa weasyprint o wkhtmltopdf para la conversión. Alternativamente genera HTML y envíalo por correo si PDF no es estrictamente necesario.
