You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
resumen_backoffice/concatenar_archivos.py

137 lines
4.8 KiB

import os
import re
import sys
import anthropic
from datetime import datetime
# Ruta donde están los archivos
ruta_archivos = "/var/www/html"
# Patrón para archivos con fechas en el nombre
patron_fecha = re.compile(r"resumen_sapian_(\d{4}-\d{2}-\d{2})")
# Verificar si el usuario pasó el mes como argumento
if len(sys.argv) != 2:
print("Uso: python3 concatenar_archivos.py <mes>")
print("Ejemplo: python3 concatenar_archivos.py 11")
sys.exit(1)
mes_argumento = sys.argv[1]
# Validar el argumento del mes
if not mes_argumento.isdigit() or not (1 <= int(mes_argumento) <= 12):
print("El mes debe ser un número entre 01 y 12.")
sys.exit(1)
# Formatear el mes como dos dígitos
mes_argumento = mes_argumento.zfill(2)
# Obtener el año actual para construir el filtro de archivos
anio_actual = datetime.now().year
# Lista para almacenar archivos que coinciden con el mes especificado
archivos_mes = []
# Recorrer los archivos en la ruta
for archivo in os.listdir(ruta_archivos):
match = patron_fecha.search(archivo)
if match:
fecha_str = match.group(1)
fecha = datetime.strptime(fecha_str, "%Y-%m-%d")
if fecha.strftime("%Y-%m") == f"{anio_actual}-{mes_argumento}":
archivos_mes.append(os.path.join(ruta_archivos, archivo))
# Verificar si se encontraron archivos
if not archivos_mes:
print(f"No se encontraron archivos para el mes {mes_argumento} del año {anio_actual}.")
sys.exit(0)
# Archivo de salida
archivo_salida = os.path.join(ruta_archivos, f"resumen_sapian_{anio_actual}-{mes_argumento}.txt")
# Concatenar el contenido de todos los archivos
contenido_total = ""
for archivo in archivos_mes:
with open(archivo, "r") as entrada:
contenido_total += entrada.read() + "\n"
# Eliminar todas las etiquetas HTML
contenido_sin_html = re.sub(r"<[^>]*>", "", contenido_total)
# Eliminar el bloque CSS repetido. Suponiendo que el CSS siempre está entre
# 'body {' y la siguiente "Resumen de Llamada".
# Esta expresión regular busca "body {", consume todo hasta el siguiente "Resumen de Llamada"
# y lo reemplaza por nada.
contenido_sin_css = re.sub(r"(?s)body\s*\{.*?Resumen de Llamada", "Resumen de Llamada", contenido_sin_html)
# También podrías optar por eliminar cualquier otro bloque CSS conocido. Por ejemplo, si tu CSS
# siempre va desde `body {` hasta antes del siguiente `Resumen de Llamada`, el anterior regex debería funcionar.
# Si tu CSS es exactamente el mismo en todas partes, podrías usar una expresión más específica.
# Limpiar espacios en blanco excesivos
contenido_limpio = re.sub(r"\s+\n", "\n", contenido_sin_css).strip()
# Guardar el resultado limpio en el archivo final
with open(archivo_salida, "w") as salida:
salida.write(contenido_limpio)
print(f"Archivos del mes {mes_argumento} concatenados sin HTML/CSS en: {archivo_salida}")
def consultar_claude(text):
ruta_archivo = "/home/promt_back.txt"
# Leer el contenido del archivo y asignarlo a un string
try:
with open(ruta_archivo, "r") as archivo:
contenido = archivo.read()
except FileNotFoundError:
print(f"El archivo {ruta_archivo} no existe.")
contenido = ""
except Exception as e:
print(f"Ocurrió un error al leer el archivo: {e}")
contenido = ""
client = anthropic.Anthropic(api_key='sk-ant-')
message = client.messages.create(
model="claude-3-5-haiku-20241022",
max_tokens=5000,
temperature=0,
system=(
"vas a recibir el siguiente archivo con varias llamadas, debes devolver la respuesta en HTML para una pagina con tablas CSS. De cada petición devuélvemela formateada en HTML. Lo que devuelvas será escrito en una página con la siguiente peticion:"
+ contenido
),
messages=[
{
"role": "user",
"content": [{"type": "text", "text": text}]
}
]
)
respuesta_claude = "".join([msg.text for msg in message.content])
# Procesar para agregar la clase TEMA a todas las celdas correspondientes
respuesta_claude = respuesta_claude.replace("<td>", "<td class='TEMA'>")
return respuesta_claude
try:
with open(archivo_salida, "r") as archivo:
contenido = archivo.read()
except FileNotFoundError:
print(f"El archivo {archivo_salida} no existe.")
contenido = ""
except Exception as e:
print(f"Ocurrió un error al leer el archivo: {e}")
contenido = ""
resp_claude = consultar_claude(contenido)
archivo_salida_html = os.path.join(ruta_archivos, f"back_de_mes_sapian_{anio_actual}-{mes_argumento}.html")
try:
with open(archivo_salida_html, "w") as archivo:
archivo.write(resp_claude)
print(f"Archivo creado exitosamente en: {archivo_salida_html}")
except Exception as e:
print(f"Error al crear el archivo: {e}")