import pdfplumber import re import pandas as pd import matplotlib.pyplot as plt archivos = ["enero-2024.pdf", "febrero-2024.pdf", "marzo-2024.pdf","abril-2024.pdf","junio-2024.pdf","julio-2024.pdf","agosto-2024.pdf","septiembre-2024.pdf","octubre-2024.pdf","noviembre-2024.pdf","diciembre-2024.pdf","enero-2025.pdf", "febrero-2025.pdf", "marzo-2025.pdf","abril-2025.pdf","junio-2025.pdf","julio-2025.pdf","agosto-2025.pdf","septiembre-2025.pdf","octubre-2025.pdf","noviembre-2025.pdf","diciembre-2025.pdf"] datos = [] for archivo in archivos: with pdfplumber.open(archivo) as pdf: texto = " ".join([p.extract_text() for p in pdf.pages if p.extract_text()]) #print(texto) # Patrones fecha = re.search(r"Fecha hasta *?(\d{2}-\d{2}-\d{4})", texto) consumo = re.search(r"Consumo.*?(\d+)\s*kWh", texto) total = re.search(r"VALOR TOTAL.*?\$?([\d,.]+)", texto) val_imp = re.search(r"TOTAL SE Y AP \(1\).*?\$?([\d,.]+)", texto) val_basura = re.search(r"TOTAL RECOLECCIÓN BASURA \(5\).*?\$?([\d,.]+)", texto) #print(fecha) for pagina in pdf.pages: tablas = pagina.extract_tables() for tabla in tablas: df_tabla = pd.DataFrame(tabla[1:], columns=tabla[0]) # Buscar la fila específica fila = df_tabla[df_tabla.iloc[:,0].str.contains("Energía Facturada", case=False, na=False)] if not fila.empty: consumo = fila["Consumo Total"].values[0] # nombre exacto de la columna datos.append({ "archivo": archivo, "Fecha" : fecha.group(1) if fecha else None, "KW Consumidos": consumo, "Valor total": float(total.group(1).replace(",", "")) if total else None, "Valor SE y AP": float(val_imp.group(1).replace(",", "")) if val_imp else None, "Valor Basura" : float(val_basura.group(1).replace(",", "")) if val_basura else None }) df = pd.DataFrame(datos) print(df) # Exportar a CSV df.to_csv("consumo.csv", index=False) # Exportar a JSON df.to_json("consumo.json", orient="records", indent=4) print("Datos exportados a consumo.csv y consumo.json") # aqui grafica los resultados # Cargar datos df = pd.read_csv("consumo.csv") # Convertir fechas df["Fecha"] = pd.to_datetime(df["Fecha"], dayfirst=True) df["anio"] = df["Fecha"].dt.year df["mes"] = df["Fecha"].dt.month # Identificar último año y anterior ultimo_anio = df["anio"].max() anterior_anio = ultimo_anio - 1 # Filtrar datos df_ultimo = df[df["anio"] == ultimo_anio] df_anterior = df[df["anio"] == anterior_anio] # Graficar comparación plt.figure(figsize=(10,6)) plt.plot(df_anterior["mes"], df_anterior["KW Consumidos"], marker="o", label=f"Año {anterior_anio}", color="red") plt.plot(df_ultimo["mes"], df_ultimo["KW Consumidos"], marker="o", label=f"Año {ultimo_anio}", color="blue") # etiquetas a los valores for x, y in zip(df_anterior["mes"], df_anterior["Valor total"]): plt.text(x, y+5, str(y), color="red", ha="center", fontsize=8) for x, y in zip(df_ultimo["mes"], df_ultimo["Valor total"]): plt.text(x, y+5, str(y), color="blue", ha="center", fontsize=8) plt.title("Comparación de consumo eléctrico entre dos años") plt.xlabel("Mes") plt.ylabel("Consumo Total (kWh)") plt.xticks(range(1,13)) plt.legend() plt.grid(True) plt.tight_layout() plt.show()