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)