Curso de Automatización (RPA)

Clase 2: Tu Robot Lector de Reportes

⏱️ Tiempo de lectura: 12 minutos
🧩 Actividades: 1
📚 Nivel: Básico

🚀 Siguiente Nivel: Interactuando con Archivos

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.

📂 Preparando el Escenario

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:

  1. Una carpeta llamada reportes_diarios.
  2. Dentro de esa carpeta, crea tres archivos de texto:
    • lunes.txt: con el texto "Ventas totales: 1500 USD"
    • martes.txt: con el texto "Ventas totales: 2250 USD"
    • miercoles.txt: con el texto "Ventas totales: 1800 USD"

Nuestro script de Python se guardará en la carpeta principal del proyecto, al mismo nivel que la carpeta reportes_diarios.

📚 Librerías: El Poder Nativo de Python

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.).

📄 El Código del Robot Lector

Crea un archivo llamado compilador_reportes.py y añade el siguiente código:

compilador_reportes.py

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.")
                    

🧐 Desglose del Código

  • 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.
¡Tu Turno! Ejecuta el script con 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.