88 lines
3.4 KiB
Python
88 lines
3.4 KiB
Python
import pandas as pd
|
|
import os
|
|
import re
|
|
import logging
|
|
import PyLibrary.funciones_comunes as fc
|
|
from openpyxl.utils.escape import unescape
|
|
|
|
def update_from_master(tipo_PLC, codigo_columna_maestra, archivo_maestro, archivo_to_update, target_lang_code):
|
|
if not os.path.exists(archivo_maestro):
|
|
print("El archivo maestro no existe.")
|
|
return
|
|
|
|
# Configurar el logger
|
|
logger = fc.configurar_logger()
|
|
|
|
logger.info(" .... ")
|
|
logger.info(
|
|
f"Iniciando actualizacion en {archivo_to_update} desde el archivo maestro. Para {target_lang_code} "
|
|
)
|
|
|
|
df_maestro = fc.read_dataframe_with_cleanup_retries(archivo_maestro)
|
|
df_to_update = fc.read_dataframe_with_cleanup_retries(archivo_to_update)
|
|
|
|
col_clave = codigo_columna_maestra
|
|
|
|
# Iterar sobre las filas del archivo de actualización para actualizarlas
|
|
for index, fila in df_to_update.iterrows():
|
|
valor_original = fila[col_clave]
|
|
clave = fc.compactar_celda_clave(tipo_PLC, valor_original)
|
|
logger.info(
|
|
f'Fila {index} : Clave: {clave}'
|
|
)
|
|
|
|
if not pd.isnull(clave) and clave in df_maestro[col_clave].values:
|
|
# Obtenemos los valores
|
|
|
|
valor_traducido_compacto = df_maestro.loc[
|
|
df_maestro[col_clave] == clave, target_lang_code
|
|
].values[0]
|
|
# Descompactamos
|
|
valor_traducido = fc.decompactar_celda_traducida(tipo_PLC,
|
|
celda_original=valor_original, celda_traducida=valor_traducido_compacto
|
|
)
|
|
if (
|
|
not pd.isnull(valor_traducido)
|
|
and fila[target_lang_code] != valor_traducido
|
|
):
|
|
# Salvamos en el file to Update
|
|
okToSave, Error = fc.verificar_celda_traducida(tipo_PLC,
|
|
clave, valor_traducido_compacto
|
|
)
|
|
if okToSave:
|
|
logger.info("Actualizado.")
|
|
df_to_update.at[index, target_lang_code] = valor_traducido
|
|
else:
|
|
df_to_update.at[index, target_lang_code] = valor_original
|
|
logger.error(
|
|
f'No actualizado porque: {Error}'
|
|
)
|
|
|
|
# Guardar el archivo actualizado
|
|
nombre, extension = os.path.splitext(archivo_to_update)
|
|
nuevo_nombre = f"{nombre}_import{extension}"
|
|
fc.save_dataframe_with_retries(df_to_update, output_path=nuevo_nombre)
|
|
print(
|
|
f"Se han actualizado las filas en {archivo_to_update} desde el archivo maestro. "
|
|
)
|
|
logger.info(
|
|
f"Se han actualizado las filas en {archivo_to_update} desde el archivo maestro. "
|
|
)
|
|
logger.info(" .... ")
|
|
|
|
def run(tipo_PLC, codigo_columna_maestra, seleccion_idioma) :
|
|
archivo_maestro = f".\\data\\1_hmi_master_translates_{tipo_PLC}.xlsx"
|
|
archivo_to_update = fc.select_file("xlsx")
|
|
if archivo_to_update:
|
|
if seleccion_idioma not in fc.IDIOMAS:
|
|
print("Selección inválida.")
|
|
else:
|
|
_, target_lang_code = fc.IDIOMAS[seleccion_idioma]
|
|
update_from_master(tipo_PLC, codigo_columna_maestra, archivo_maestro, archivo_to_update, target_lang_code)
|
|
|
|
if __name__ == "__main__":
|
|
tipo_PLC = "siemens"
|
|
codigo_columna_maestra = "it-IT"
|
|
fc.mostrar_idiomas()
|
|
seleccion_idioma = int(input("Introduce el número del idioma de destino: "))
|
|
run(tipo_PLC, codigo_columna_maestra) |