HMI_Translate_Helper_wMaste.../importar_to_master.py

91 lines
3.5 KiB
Python
Raw Normal View History

2024-07-30 06:30:08 -03:00
import pandas as pd
import os
import re
from manejoArchivos import select_file
def es_columna_tipo_xxYY(columna):
# Verificar si la columna es del tipo "xx-YY" usando una expresión regular
return bool(re.match(r'^[a-z]{2}-[A-Z]{2}$', columna))
def sustituir_digitos(celda):
# Convertir a cadena y sustituir secuencias de dígitos por [[digits]]
if pd.isnull(celda):
return celda
return re.sub(r'\d+', '[[digits]]', str(celda))
def preprocesar_importacion(df_importacion):
# Iterar sobre las filas del DataFrame de importación
for index, fila in df_importacion.iterrows():
clave_original = str(fila['it-IT'])
clave_sustituida = sustituir_digitos(clave_original)
# Sustituir en las demás columnas del tipo "xx-YY"
for columna in df_importacion.columns:
if columna != 'it-IT' and es_columna_tipo_xxYY(columna):
df_importacion.at[index, columna] = sustituir_digitos(fila[columna])
# Guardar la clave sustituida
df_importacion.at[index, 'it-IT'] = clave_sustituida
return df_importacion
def importar(archivo_maestro, archivo_importacion):
if not os.path.exists(archivo_maestro):
# Crear un DataFrame maestro vacío con la columna "it-IT"
df_maestro = pd.DataFrame(columns=["it-IT"])
else:
df_maestro = pd.read_excel(archivo_maestro)
df_importacion = pd.read_excel(archivo_importacion)
# Preprocesar el archivo de importación
df_importacion = preprocesar_importacion(df_importacion)
# Obtener las claves existentes en el archivo maestro
claves_maestro = set(df_maestro["it-IT"].dropna().astype(str))
# Filtrar filas del archivo de importación que no están en el archivo maestro
nuevas_filas = df_importacion[
df_importacion["it-IT"].apply(
lambda x: len(str(x)) > 5 and str(x) not in claves_maestro
)
]
# Si no hay filas nuevas, terminar
if nuevas_filas.empty:
print("No hay nuevas filas para agregar.")
return
# Agregar columnas del tipo "xx-YY" que no existen en el archivo maestro
for columna in nuevas_filas.columns:
if es_columna_tipo_xxYY(columna) and columna not in df_maestro.columns:
df_maestro[columna] = None
# Crear una lista de diccionarios para las filas que se van a agregar
filas_a_agregar = []
# Iterar sobre las nuevas filas para agregarlas y actualizar las claves
for _, fila in nuevas_filas.iterrows():
clave = str(fila["it-IT"])
if clave not in claves_maestro:
claves_maestro.add(clave)
# Solo agregar las columnas del tipo "xx-YY" y "it-IT"
fila_filtrada = {col: fila[col] for col in fila.index if col == "it-IT" or es_columna_tipo_xxYY(col)}
filas_a_agregar.append(fila_filtrada)
# Concatenar las nuevas filas al DataFrame maestro
if filas_a_agregar:
df_nuevas_filas = pd.DataFrame(filas_a_agregar)
df_maestro = pd.concat([df_maestro, df_nuevas_filas], ignore_index=True)
# Guardar el archivo maestro actualizado
df_maestro.to_excel(archivo_maestro, index=False)
print(f"Se han agregado {len(filas_a_agregar)} nuevas filas al archivo maestro.")
if __name__ == "__main__":
# Cargar el archivo maestro y el archivo de importación
archivo_maestro = "hmi_master_translates.xlsx"
archivo_importacion = select_file("xlsx")
if archivo_importacion:
importar(archivo_maestro, archivo_importacion)