81 lines
3.1 KiB
Python
81 lines
3.1 KiB
Python
import pandas as pd
|
|
import os
|
|
import re
|
|
import logging
|
|
import funciones_comunes as fc
|
|
from manejoArchivos import select_file
|
|
|
|
|
|
def update_from_master(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 = pd.read_excel(archivo_maestro)
|
|
df_to_update = pd.read_excel(archivo_to_update)
|
|
|
|
col_clave = df_maestro.columns[0]
|
|
|
|
# Iterar sobre las filas del archivo de actualización para actualizarlas
|
|
for index, fila in df_to_update.iterrows():
|
|
clave = fila[col_clave]
|
|
if not pd.isnull(clave) and clave in df_maestro[col_clave].values:
|
|
# Obtenemos los valores
|
|
valor_original = fila[col_clave]
|
|
valor_traducido_compacto = df_maestro.loc[
|
|
df_maestro[col_clave] == clave, target_lang_code
|
|
].values[0]
|
|
# Descompactamos
|
|
valor_traducido = fc.decompactar_celda_traducida(
|
|
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(
|
|
valor_original, valor_traducido
|
|
)
|
|
if okToSave:
|
|
logger.info(
|
|
f'Fila {index} : Clave: {clave}, Columna {target_lang_code}: "{df_to_update.at[index, target_lang_code]}" actualizado a "{valor_traducido}"'
|
|
)
|
|
df_to_update.at[index, target_lang_code] = valor_traducido
|
|
else:
|
|
logger.error(
|
|
f'Fila {index}, Columna {target_lang_code}: "{df_to_update.at[index, target_lang_code]}" valor:"{valor_traducido}" no actualizado porque {Error}'
|
|
)
|
|
|
|
# Guardar el archivo actualizado
|
|
fc.save_dataframe_with_retries(df_to_update, output_path=archivo_to_update)
|
|
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(" .... ")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
archivo_maestro = ".\\data\\1_hmi_master_translates.xlsx"
|
|
archivo_to_update = select_file("xlsx")
|
|
if archivo_to_update:
|
|
fc.mostrar_idiomas()
|
|
seleccion_idioma = int(input("Introduce el número del idioma de destino: "))
|
|
if seleccion_idioma not in fc.IDIOMAS:
|
|
print("Selección inválida.")
|
|
else:
|
|
target_lang, target_lang_code = fc.IDIOMAS[seleccion_idioma]
|
|
update_from_master(archivo_maestro, archivo_to_update, target_lang_code)
|