En la clase anterior, nuestro robot aprendió a controlar el teclado y el mouse para interactuar con una aplicación. Ahora, le daremos una nueva habilidad: la capacidad de leer y manipular archivos del sistema. Esta es una de las tareas más comunes y útiles en la automatización de oficinas.
El desafío de hoy: tenemos una carpeta con múltiples reportes de ventas diarios en archivos de texto. Nuestro robot deberá leer cada uno de ellos y consolidar toda la información en un único reporte semanal.
Antes de escribir el código, necesitamos crear la estructura de archivos que nuestro robot procesará. En la carpeta de tu proyecto, crea lo siguiente:
reportes_diarios.Nuestro script de Python se guardará en la carpeta principal del proyecto, al mismo nivel que la carpeta reportes_diarios.
Para esta tarea, no necesitamos instalar nada nuevo. Usaremos la librería os, que viene incorporada en Python y nos da las herramientas para interactuar con el sistema operativo (listar archivos, verificar rutas, etc.).
Crea un archivo llamado compilador_reportes.py y añade el siguiente código:
import os
from datetime import datetime
# --- CONFIGURACIÓN ---
CARPETA_REPORTES = "reportes_diarios"
NOMBRE_REPORTE_FINAL = "reporte_semanal_consolidado.txt"
def consolidar_reportes():
"""
Lee todos los archivos .txt de la carpeta de reportes
y consolida su contenido en un único archivo.
"""
contenido_total = []
# 1. Verificar si la carpeta de origen existe
if not os.path.exists(CARPETA_REPORTES):
print(f"❌ Error: La carpeta '{CARPETA_REPORTES}' no existe. Abortando misión.")
return
# 2. Obtener la lista de archivos en la carpeta
archivos_en_carpeta = os.listdir(CARPETA_REPORTES)
print(f"📄 Encontrados {len(archivos_en_carpeta)} archivos. Procesando solo los .txt...")
# 3. Recorrer cada archivo
for nombre_archivo in archivos_en_carpeta:
# Solo procesar archivos que terminen en .txt
if nombre_archivo.lower().endswith(".txt"):
ruta_completa = os.path.join(CARPETA_REPORTES, nombre_archivo)
try:
# 4. Abrir, leer y guardar contenido
with open(ruta_completa, 'r', encoding='utf-8') as archivo:
contenido = archivo.read()
encabezado_archivo = f"--- Contenido de: {nombre_archivo} ---\n"
contenido_total.append(encabezado_archivo)
contenido_total.append(contenido + "\n\n")
except Exception as e:
print(f"⚠️ No se pudo leer el archivo {nombre_archivo}. Error: {e}")
# 5. Guardar el reporte consolidado
if contenido_total:
fecha_actual = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
encabezado_final = f"Reporte Semanal Consolidado\nGenerado el: {fecha_actual}\n{'='*40}\n\n"
with open(NOMBRE_REPORTE_FINAL, 'w', encoding='utf-8') as reporte_final:
reporte_final.write(encabezado_final)
reporte_final.writelines(contenido_total)
print(f"✅ ¡Éxito! Reporte consolidado guardado en '{NOMBRE_REPORTE_FINAL}'.")
else:
print("ℹ️ No se encontraron archivos .txt para procesar.")
# --- Punto de Entrada Principal ---
if __name__ == "__main__":
print("🤖 Iniciando robot lector de reportes...")
consolidar_reportes()
print("✅ Proceso finalizado.")
os.path.exists(CARPETA_REPORTES): Antes de intentar hacer nada, verificamos si la carpeta de donde debemos leer los reportes realmente existe. Es una validación clave para evitar errores.os.listdir(CARPETA_REPORTES): Este comando nos devuelve una lista con los nombres de todos los archivos y carpetas que hay dentro del directorio especificado.nombre_archivo.lower().endswith(".txt"): Dentro del bucle, usamos esta condición para asegurarnos de que solo procesamos archivos de texto, ignorando cualquier otra cosa (como imágenes o subcarpetas).os.path.join(...): Esta es la forma correcta de construir rutas de archivo. Une el nombre de la carpeta y el nombre del archivo con el separador correcto (\ en Windows, / en Mac/Linux), haciendo tu script más robusto.with open(...): Es la manera recomendada en Python para trabajar con archivos. Se encarga de abrir el archivo y, lo más importante, de cerrarlo automáticamente cuando terminamos, incluso si ocurren errores.python compilador_reportes.py. Verás cómo se crea un nuevo archivo reporte_semanal_consolidado.txt en tu carpeta principal, conteniendo la información de los tres reportes diarios.