¿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.
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.
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.
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}").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.
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.
producto,importe
Cuaderno,12.50
Bolígrafo,3.20
Cuaderno,7.30DictReader 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.
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}")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.
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.
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.