Python es una de las mejores herramientas para eliminar tareas repetitivas del trabajo diario. Con unas pocas líneas puedes renombrar archivos, organizar carpetas, generar informes, validar datos, crear copias de seguridad o consultar servicios externos. La clave no es copiar un script y ejecutarlo sin revisar, sino entender sus rutas, permisos, entradas y posibles efectos.
Antes de automatizar procesos reales, conviene conocer automatización de tareas con Python, el manejo de rutas con pathlib, el uso de archivos CSV y las excepciones en Python. Prueba siempre con copias y añade un modo simulación cuando el script mueva, renombre o elimine archivos.
1. Crear carpetas por fecha
from pathlib import Path
from datetime import date
carpeta = Path("informes") / date.today().isoformat()
carpeta.mkdir(parents=True, exist_ok=True)Este patrón sirve para separar exportaciones diarias y evitar mezclar resultados.
2. Renombrar archivos en lote
from pathlib import Path
for indice, archivo in enumerate(Path("fotos").glob("*.jpg"), start=1):
nuevo = archivo.with_name(f"foto_{indice:04d}.jpg")
archivo.rename(nuevo)Comprueba primero si el nombre nuevo ya existe. Para mayor seguridad, imprime el plan antes de renombrar.
3. Organizar descargas por extensión
import shutil
from pathlib import Path
base = Path.home() / "Downloads"
for archivo in base.iterdir():
if archivo.is_file():
extension = archivo.suffix.lower().lstrip(".") or "sin_extension"
destino = base / extension
destino.mkdir(exist_ok=True)
shutil.move(str(archivo), str(destino / archivo.name))Ignora archivos temporales como .part o .crdownload.
4. Buscar archivos grandes
limite = 500 * 1024 * 1024
for archivo in Path.home().rglob("*"):
try:
if archivo.is_file() and archivo.stat().st_size > limite:
print(archivo, archivo.stat().st_size)
except PermissionError:
continueNo recorras todo el disco sin necesidad; limita la búsqueda a carpetas específicas.
5. Crear una copia de seguridad ZIP
import shutil
from datetime import datetime
nombre = f"backup_{datetime.now():%Y%m%d_%H%M%S}"
shutil.make_archive(nombre, "zip", root_dir="proyecto")Verifica después que el archivo pueda abrirse. Una copia no comprobada no es un respaldo confiable.
6. Eliminar archivos temporales antiguos
from datetime import datetime, timedelta
limite = datetime.now() - timedelta(days=30)
for archivo in Path("temporales").glob("*.tmp"):
fecha = datetime.fromtimestamp(archivo.stat().st_mtime)
if fecha < limite:
archivo.unlink()Valida que la carpeta objetivo sea exactamente la esperada antes de borrar.
7. Combinar varios CSV
import pandas as pd
archivos = Path("ventas").glob("*.csv")
dataframes = [pd.read_csv(ruta) for ruta in archivos]
resultado = pd.concat(dataframes, ignore_index=True)
resultado.to_csv("ventas_combinadas.csv", index=False)Comprueba que todas las columnas sean compatibles antes de concatenar.
8. Eliminar filas duplicadas
df = pd.read_csv("clientes.csv")
df = df.drop_duplicates(subset=["email"], keep="last")
df.to_csv("clientes_sin_duplicados.csv", index=False)Conservar la última fila solo es correcto cuando representa la versión más reciente.
9. Convertir Excel a CSV
df = pd.read_excel("datos.xlsx", sheet_name="Ventas")
df.to_csv("ventas.csv", index=False, encoding="utf-8")Las fórmulas, formatos y varias hojas no se conservan en CSV.
10. Generar un informe de carpetas
import csv
with open("inventario.csv", "w", newline="", encoding="utf-8") as salida:
escritor = csv.writer(salida)
escritor.writerow(["ruta", "bytes"])
for archivo in Path("documentos").rglob("*"):
if archivo.is_file():
escritor.writerow([archivo, archivo.stat().st_size])El módulo CSV de la documentación oficial explica opciones para delimitadores, encabezados y dialectos.
11. Descargar un archivo con Requests
import requests
url = "https://example.com/informe.pdf"
respuesta = requests.get(url, timeout=30)
respuesta.raise_for_status()
Path("informe.pdf").write_bytes(respuesta.content)En archivos grandes utiliza transmisión por bloques y limita el tamaño máximo permitido.
12. Comprobar si un sitio responde
import requests
try:
respuesta = requests.get("https://example.com", timeout=10)
print(respuesta.status_code)
except requests.RequestException as error:
print(f"No disponible: {error}")Una sola respuesta fallida no demuestra una caída; añade reintentos y comprueba desde más de una ubicación.
13. Extraer títulos de una página
import requests
from bs4 import BeautifulSoup
html = requests.get("https://example.com", timeout=20).text
sopa = BeautifulSoup(html, "html.parser")
for titulo in sopa.select("h2"):
print(titulo.get_text(" ", strip=True))Respeta los términos del sitio, el archivo robots.txt y los límites de solicitudes.
14. Enviar un correo por SMTP
import smtplib
from email.message import EmailMessage
mensaje = EmailMessage()
mensaje["Subject"] = "Informe automático"
mensaje["From"] = "[email protected]"
mensaje["To"] = "[email protected]"
mensaje.set_content("El informe está listo.")
with smtplib.SMTP_SSL("smtp.example.com", 465) as servidor:
servidor.login("[email protected]", "CONTRASEÑA")
servidor.send_message(mensaje)No escribas credenciales en el código. Utiliza variables de entorno o un gestor de secretos. Consulta la documentación oficial de smtplib.
15. Crear contraseñas seguras
import secrets
import string
alfabeto = string.ascii_letters + string.digits + "!@#$%"
password = "".join(secrets.choice(alfabeto) for _ in range(20))
print(password)Para seguridad utiliza secrets, no random.
16. Calcular hashes de archivos
import hashlib
def hash_archivo(ruta):
digest = hashlib.sha256()
with open(ruta, "rb") as archivo:
for bloque in iter(lambda: archivo.read(1024 * 1024), b""):
digest.update(bloque)
return digest.hexdigest()Los hashes permiten comprobar integridad después de copiar o descargar.
17. Reemplazar texto en varios archivos
for ruta in Path("docs").glob("*.txt"):
texto = ruta.read_text(encoding="utf-8")
nuevo = texto.replace("Empresa Antigua", "Empresa Nueva")
ruta.write_text(nuevo, encoding="utf-8")Crea una copia antes de modificar. Los reemplazos simples pueden cambiar partes no deseadas.
18. Convertir imágenes por lote
from PIL import Image
salida = Path("convertidas")
salida.mkdir(exist_ok=True)
for ruta in Path("imagenes").glob("*.png"):
with Image.open(ruta) as imagen:
imagen.convert("RGB").save(salida / f"{ruta.stem}.jpg", quality=90)Ten en cuenta transparencias, perfiles de color y orientación EXIF.
19. Vigilar una carpeta
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class Eventos(FileSystemEventHandler):
def on_created(self, event):
if not event.is_directory:
print("Nuevo:", event.src_path)Esta base permite iniciar procesamientos cuando llegan archivos, pero debes evitar eventos duplicados y esperar a que la copia termine.
20. Programar una tarea diaria
La forma más confiable suele ser utilizar el Programador de tareas de Windows, cron en Linux o launchd en macOS. El script debe ejecutar una tarea y terminar, mientras el sistema operativo controla el horario, los reintentos y los registros.
def main():
generar_informe()
if __name__ == "__main__":
main()Cómo convertir un ejemplo en automatización confiable
Cada script debe validar sus entradas, usar rutas configurables y registrar errores. Añade logging, límites de tiempo, reintentos y un modo simulación. No captures todas las excepciones para continuar como si nada; registra el problema y decide si la operación puede repetirse.
También es importante que el proceso sea idempotente: ejecutarlo dos veces no debería duplicar registros, sobrescribir datos inesperadamente ni enviar dos correos. Guarda estados o identificadores cuando sea necesario.
Conclusión
Estos veinte ejemplos cubren archivos, datos, red, correo, seguridad e imágenes. Empieza por una tarea pequeña y repetitiva, crea una versión que solo muestre lo que haría y después habilita los cambios reales. Una buena automatización no solo ahorra tiempo: también deja registros, maneja errores y puede ejecutarse nuevamente sin causar daños.






