Filtrado de caracteres especiales al importar desde excel. Cambios en la logica de importacion inicial.
This commit is contained in:
parent
f78400399e
commit
b38453248b
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
91
config.ini
91
config.ini
|
@ -6,95 +6,30 @@ idioma_var2 = English_US
|
||||||
|
|
||||||
[TextContent]
|
[TextContent]
|
||||||
output_text = Ejecutando x1_importar_to_master.run()
|
output_text = Ejecutando x1_importar_to_master.run()
|
||||||
Se han agregado 929 nuevas filas al archivo maestro.
|
Se han agregado 939 nuevas filas válidas al archivo maestro.
|
||||||
Ejecutando x2_master_export2translate.run()
|
Ejecutando x2_master_export2translate.run()
|
||||||
Archivo guardado exitosamente.
|
Archivo leído y limpiado exitosamente: .\data\1_hmi_master_translates_allenbradley.xlsx
|
||||||
Archivo exportado para traducción: .\data\2_master_export2translate_allenbradley.xlsx
|
Archivo exportado para traducción: .\data\2_master_export2translate_allenbradley.xlsx
|
||||||
Ejecutando x3_llm_auto_translate.run()
|
Ejecutando x3_llm_auto_translate.run()
|
||||||
Número total de textos a traducir: 621
|
Archivo leído y limpiado exitosamente: .\data\2_master_export2translate_allenbradley.xlsx
|
||||||
Traduciendo : celdas desde: 0 a :20.
|
Número total de textos a traducir: 0
|
||||||
Traduciendo : celdas desde: 20 a :40.
|
|
||||||
Traduciendo : celdas desde: 40 a :60.
|
|
||||||
Traduciendo : celdas desde: 60 a :80.
|
|
||||||
Traduciendo : celdas desde: 80 a :100.
|
|
||||||
Traduciendo : celdas desde: 100 a :120.
|
|
||||||
Traduciendo : celdas desde: 120 a :140.
|
|
||||||
Traduciendo : celdas desde: 140 a :160.
|
|
||||||
Traduciendo : celdas desde: 160 a :180.
|
|
||||||
Traduciendo : celdas desde: 180 a :200.
|
|
||||||
Traduciendo : celdas desde: 200 a :220.
|
|
||||||
Traduciendo : celdas desde: 220 a :240.
|
|
||||||
Traduciendo : celdas desde: 240 a :260.
|
|
||||||
Error en el intento 1 de traducción de celdas desde 240 a 260: La cantidad de traducciones recibidas no coincide con la cantidad de textos enviados.. Reintentando...
|
|
||||||
Traduciendo : celdas desde: 260 a :280.
|
|
||||||
Traduciendo : celdas desde: 280 a :300.
|
|
||||||
Traduciendo : celdas desde: 300 a :320.
|
|
||||||
Traduciendo : celdas desde: 320 a :340.
|
|
||||||
Traduciendo : celdas desde: 340 a :360.
|
|
||||||
Traduciendo : celdas desde: 360 a :380.
|
|
||||||
Traduciendo : celdas desde: 380 a :400.
|
|
||||||
Traduciendo : celdas desde: 400 a :420.
|
|
||||||
Traduciendo : celdas desde: 420 a :440.
|
|
||||||
Traduciendo : celdas desde: 440 a :460.
|
|
||||||
Traduciendo : celdas desde: 460 a :480.
|
|
||||||
Traduciendo : celdas desde: 480 a :500.
|
|
||||||
Traduciendo : celdas desde: 500 a :520.
|
|
||||||
Traduciendo : celdas desde: 520 a :540.
|
|
||||||
Traduciendo : celdas desde: 540 a :560.
|
|
||||||
Traduciendo : celdas desde: 560 a :580.
|
|
||||||
Traduciendo : celdas desde: 580 a :600.
|
|
||||||
Traduciendo : celdas desde: 600 a :620.
|
|
||||||
Traduciendo : celdas desde: 620 a :621.
|
|
||||||
Afinidad: celdas desde: 0 a :20.
|
|
||||||
Error en el intento 1 de Afinidad de celdas desde 0 a 20: La cantidad de afinidades recibidas no coincide con la cantidad de textos enviados.. Reintentando...
|
|
||||||
Error en todos los intentos de Afinidad de celdas desde 0 a 20: La cantidad de afinidades recibidas no coincide con la cantidad de textos enviados.
|
|
||||||
Afinidad: celdas desde: 20 a :40.
|
|
||||||
Afinidad: celdas desde: 40 a :60.
|
|
||||||
Afinidad: celdas desde: 60 a :80.
|
|
||||||
Afinidad: celdas desde: 80 a :100.
|
|
||||||
Error en el intento 1 de Afinidad de celdas desde 80 a 100: La cantidad de afinidades recibidas no coincide con la cantidad de textos enviados.. Reintentando...
|
|
||||||
Error en todos los intentos de Afinidad de celdas desde 80 a 100: La cantidad de afinidades recibidas no coincide con la cantidad de textos enviados.
|
|
||||||
Afinidad: celdas desde: 100 a :120.
|
|
||||||
Afinidad: celdas desde: 120 a :140.
|
|
||||||
Error en el intento 1 de Afinidad de celdas desde 120 a 140: La cantidad de afinidades recibidas no coincide con la cantidad de textos enviados.. Reintentando...
|
|
||||||
Error en todos los intentos de Afinidad de celdas desde 120 a 140: La cantidad de afinidades recibidas no coincide con la cantidad de textos enviados.
|
|
||||||
Afinidad: celdas desde: 140 a :160.
|
|
||||||
Afinidad: celdas desde: 160 a :180.
|
|
||||||
Afinidad: celdas desde: 180 a :200.
|
|
||||||
Afinidad: celdas desde: 200 a :220.
|
|
||||||
Afinidad: celdas desde: 220 a :240.
|
|
||||||
Afinidad: celdas desde: 240 a :260.
|
|
||||||
Afinidad: celdas desde: 260 a :280.
|
|
||||||
Afinidad: celdas desde: 280 a :300.
|
|
||||||
Afinidad: celdas desde: 300 a :320.
|
|
||||||
Afinidad: celdas desde: 320 a :340.
|
|
||||||
Afinidad: celdas desde: 340 a :360.
|
|
||||||
Afinidad: celdas desde: 360 a :380.
|
|
||||||
Error en el intento 1 de Afinidad de celdas desde 360 a 380: La cantidad de afinidades recibidas no coincide con la cantidad de textos enviados.. Reintentando...
|
|
||||||
Error en todos los intentos de Afinidad de celdas desde 360 a 380: La cantidad de afinidades recibidas no coincide con la cantidad de textos enviados.
|
|
||||||
Afinidad: celdas desde: 380 a :400.
|
|
||||||
Afinidad: celdas desde: 400 a :420.
|
|
||||||
Afinidad: celdas desde: 420 a :440.
|
|
||||||
Afinidad: celdas desde: 440 a :460.
|
|
||||||
Afinidad: celdas desde: 460 a :480.
|
|
||||||
Afinidad: celdas desde: 480 a :500.
|
|
||||||
Afinidad: celdas desde: 500 a :520.
|
|
||||||
Afinidad: celdas desde: 520 a :540.
|
|
||||||
Afinidad: celdas desde: 540 a :560.
|
|
||||||
Afinidad: celdas desde: 560 a :580.
|
|
||||||
Afinidad: celdas desde: 580 a :600.
|
|
||||||
Afinidad: celdas desde: 600 a :620.
|
|
||||||
Afinidad: celdas desde: 620 a :621.
|
|
||||||
Archivo guardado exitosamente.
|
Archivo guardado exitosamente.
|
||||||
Archivo traducido guardado en: .\data\3_master_export2translate_translated_allenbradley.xlsx
|
Archivo traducido guardado en: .\data\3_master_export2translate_translated_allenbradley.xlsx
|
||||||
Ejecutando x4_integrate_translates_to_master.run()
|
Ejecutando x4_integrate_translates_to_master.run()
|
||||||
|
Archivo leído y limpiado exitosamente: .\data\1_hmi_master_translates_allenbradley.xlsx
|
||||||
|
Archivo leído y limpiado exitosamente: .\data\3_master_export2translate_translated_allenbradley.xlsx
|
||||||
Archivo guardado exitosamente.
|
Archivo guardado exitosamente.
|
||||||
Traducciones importadas y archivo maestro actualizado: .\data\1_hmi_master_translates_allenbradley.xlsx.
|
Traducciones importadas y archivo maestro actualizado: .\data\1_hmi_master_translates_allenbradley.xlsx.
|
||||||
Ejecutando x5_complete_empty_cells_master.run()
|
Ejecutando x4_integrate_translates_to_master.run()
|
||||||
|
Archivo leído y limpiado exitosamente: .\data\1_hmi_master_translates_allenbradley.xlsx
|
||||||
|
Archivo leído y limpiado exitosamente: .\data\3_master_export2translate_translated_allenbradley.xlsx
|
||||||
Archivo guardado exitosamente.
|
Archivo guardado exitosamente.
|
||||||
Traducciones importadas y archivo maestro actualizado: .\data\1_hmi_master_translates_allenbradley.xlsx.
|
Traducciones importadas y archivo maestro actualizado: .\data\1_hmi_master_translates_allenbradley.xlsx.
|
||||||
Ejecutando x6_update_from_master.run()
|
Ejecutando x6_update_from_master.run()
|
||||||
|
Archivo leído y limpiado exitosamente: .\data\1_hmi_master_translates_allenbradley.xlsx
|
||||||
|
Archivo leído y limpiado exitosamente: C:/Trabajo/VM/31 - 9.3953 - Omega - Mexico - (ABradley)/Reporte/Languages/HMI_93953_30.xlsx
|
||||||
Archivo guardado exitosamente.
|
Archivo guardado exitosamente.
|
||||||
Se han actualizado las filas en C:/Trabajo/VM/31 - 9.3953 - Omega - Mexico - (ABradley)/Reporte/HMI/HMI_93953_25.xlsx desde el archivo maestro.
|
Se han actualizado las filas en C:/Trabajo/VM/31 - 9.3953 - Omega - Mexico - (ABradley)/Reporte/Languages/HMI_93953_30.xlsx desde el archivo maestro.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
31228
logs/translate_log.log
31228
logs/translate_log.log
File diff suppressed because it is too large
Load Diff
|
@ -1,90 +1,90 @@
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import logging
|
||||||
import PyLibrary.funciones_comunes as fc
|
import PyLibrary.funciones_comunes as fc
|
||||||
|
|
||||||
def preprocesar_importacion(tipo_PLC, codigo_columna_maestra, df_importacion):
|
def preprocesar_importacion(tipo_PLC, codigo_columna_maestra, df_importacion, logger):
|
||||||
# Iterar sobre las filas del DataFrame de importación
|
filas_validas = []
|
||||||
for index, fila in df_importacion.iterrows():
|
|
||||||
clave_original = str(fila[codigo_columna_maestra])
|
for index, fila in df_importacion.iterrows():
|
||||||
clave_sustituida = fc.compactar_celda_clave(tipo_PLC, clave_original)
|
clave_original = fila[codigo_columna_maestra]
|
||||||
|
|
||||||
|
# Verificar si la celda de la columna maestra está vacía o solo contiene espacios en blanco
|
||||||
|
if pd.isna(clave_original) or str(clave_original).strip() == '':
|
||||||
|
logger.info(f"Fila {index}: Ignorada - Celda de columna maestra vacía o solo con espacios en blanco")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Aplicar unescape solo a las filas con valor no vacío en la columna maestra
|
||||||
|
nueva_fila = fila.copy()
|
||||||
|
for col in nueva_fila.index:
|
||||||
|
nueva_fila[col] = fc.limpiar_caracteres_especiales(str(nueva_fila[col]))
|
||||||
|
|
||||||
|
clave_sustituida = fc.compactar_celda_clave(tipo_PLC, str(nueva_fila[codigo_columna_maestra]))
|
||||||
|
nueva_fila[codigo_columna_maestra] = clave_sustituida
|
||||||
|
|
||||||
# Sustituir en las demás columnas del tipo "xx-YY"
|
|
||||||
for columna in df_importacion.columns:
|
for columna in df_importacion.columns:
|
||||||
if columna != codigo_columna_maestra and fc.es_columna_tipo_xxYY(columna):
|
if columna != codigo_columna_maestra and fc.es_columna_tipo_xxYY(columna):
|
||||||
df_importacion.at[index, columna] = (
|
nueva_fila[columna] = fc.compactar_celda_traducida(tipo_PLC, nueva_fila[columna])
|
||||||
fc.compactar_celda_traducida(tipo_PLC, fila[columna])
|
|
||||||
)
|
|
||||||
|
|
||||||
# Guardar la clave sustituida
|
filas_validas.append(nueva_fila)
|
||||||
df_importacion.at[index, codigo_columna_maestra] = clave_sustituida
|
|
||||||
|
|
||||||
return df_importacion
|
logger.info(f"Fila {index}: Aceptada - Clave '{clave_sustituida}' procesada")
|
||||||
|
|
||||||
|
df_valido = pd.DataFrame(filas_validas, columns=df_importacion.columns)
|
||||||
|
return df_valido
|
||||||
|
|
||||||
def importar(tipo_PLC, codigo_columna_maestra, archivo_maestro, archivo_importacion):
|
def importar(tipo_PLC, codigo_columna_maestra, archivo_maestro, archivo_importacion):
|
||||||
|
logger = fc.configurar_logger()
|
||||||
|
logger.info(" .... ")
|
||||||
|
logger.info(f"Iniciando importacion en {archivo_maestro} desde el archivo {archivo_importacion}")
|
||||||
|
|
||||||
if not os.path.exists(archivo_maestro):
|
if not os.path.exists(archivo_maestro):
|
||||||
# Crear un DataFrame maestro vacío con la columna codigo_columna_maestra
|
|
||||||
df_maestro = pd.DataFrame(columns=[codigo_columna_maestra])
|
df_maestro = pd.DataFrame(columns=[codigo_columna_maestra])
|
||||||
else:
|
else:
|
||||||
df_maestro = pd.read_excel(archivo_maestro)
|
df_maestro = fc.read_dataframe_with_cleanup_retries(archivo_maestro)
|
||||||
|
# Aplicar unescape solo a las filas con valor no vacío en la columna maestra
|
||||||
|
|
||||||
df_importacion = pd.read_excel(archivo_importacion)
|
df_importacion = pd.read_excel(archivo_importacion)
|
||||||
|
|
||||||
# Preprocesar el archivo de importación
|
df_importacion = preprocesar_importacion(tipo_PLC, codigo_columna_maestra, df_importacion, logger)
|
||||||
df_importacion = preprocesar_importacion(tipo_PLC, codigo_columna_maestra, df_importacion)
|
|
||||||
|
|
||||||
# Obtener las claves existentes en el archivo maestro
|
|
||||||
claves_maestro = set(df_maestro[codigo_columna_maestra].dropna().astype(str))
|
claves_maestro = set(df_maestro[codigo_columna_maestra].dropna().astype(str))
|
||||||
|
|
||||||
# Filtrar filas del archivo de importación que no están en el archivo maestro
|
|
||||||
nuevas_filas = df_importacion[
|
|
||||||
df_importacion[codigo_columna_maestra].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 (
|
|
||||||
fc.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 = []
|
filas_a_agregar = []
|
||||||
|
|
||||||
# Iterar sobre las nuevas filas para agregarlas y actualizar las claves
|
for index, fila in df_importacion.iterrows():
|
||||||
for _, fila in nuevas_filas.iterrows():
|
|
||||||
clave = str(fila[codigo_columna_maestra])
|
clave = str(fila[codigo_columna_maestra])
|
||||||
if clave not in claves_maestro:
|
|
||||||
claves_maestro.add(clave)
|
|
||||||
# Solo agregar las columnas del tipo "xx-YY" y codigo_columna_maestra
|
|
||||||
fila_filtrada = {
|
|
||||||
col: fila[col]
|
|
||||||
for col in fila.index
|
|
||||||
if col == codigo_columna_maestra or fc.es_columna_tipo_xxYY(col)
|
|
||||||
}
|
|
||||||
filas_a_agregar.append(fila_filtrada)
|
|
||||||
|
|
||||||
# Concatenar las nuevas filas al DataFrame maestro
|
if clave in claves_maestro:
|
||||||
if filas_a_agregar:
|
logger.info(f"Fila {index}: Ignorada - Clave '{clave}' ya existe en el archivo maestro")
|
||||||
df_nuevas_filas = pd.DataFrame(filas_a_agregar)
|
continue
|
||||||
df_maestro = pd.concat([df_maestro, df_nuevas_filas], ignore_index=True)
|
|
||||||
|
claves_maestro.add(clave)
|
||||||
|
|
||||||
|
fila_filtrada = {
|
||||||
|
col: fila[col]
|
||||||
|
for col in fila.index
|
||||||
|
if col == codigo_columna_maestra or fc.es_columna_tipo_xxYY(col)
|
||||||
|
}
|
||||||
|
filas_a_agregar.append(fila_filtrada)
|
||||||
|
|
||||||
|
if not filas_a_agregar:
|
||||||
|
logger.info("No hay nuevas filas válidas para agregar.")
|
||||||
|
return
|
||||||
|
|
||||||
|
for columna in df_importacion.columns:
|
||||||
|
if fc.es_columna_tipo_xxYY(columna) and columna not in df_maestro.columns:
|
||||||
|
df_maestro[columna] = None
|
||||||
|
|
||||||
|
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)
|
df_maestro.to_excel(archivo_maestro, index=False)
|
||||||
print(f"Se han agregado {len(filas_a_agregar)} nuevas filas al archivo maestro.")
|
logger.info(f"Se han agregado {len(filas_a_agregar)} nuevas filas válidas al archivo maestro.")
|
||||||
|
print(f"Se han agregado {len(filas_a_agregar)} nuevas filas válidas al archivo maestro.")
|
||||||
|
|
||||||
|
def run(tipo_PLC, codigo_columna_maestra):
|
||||||
def run(tipo_PLC, codigo_columna_maestra) :
|
|
||||||
# Cargar el archivo maestro y el archivo de importación
|
|
||||||
archivo_maestro = f".\\data\\1_hmi_master_translates_{tipo_PLC}.xlsx"
|
archivo_maestro = f".\\data\\1_hmi_master_translates_{tipo_PLC}.xlsx"
|
||||||
archivo_importacion = fc.select_file("xlsx")
|
archivo_importacion = fc.select_file("xlsx")
|
||||||
if archivo_importacion:
|
if archivo_importacion:
|
||||||
|
@ -94,4 +94,3 @@ if __name__ == "__main__":
|
||||||
tipo_PLC = "siemens"
|
tipo_PLC = "siemens"
|
||||||
codigo_columna_maestra = "it-IT"
|
codigo_columna_maestra = "it-IT"
|
||||||
run(tipo_PLC, codigo_columna_maestra)
|
run(tipo_PLC, codigo_columna_maestra)
|
||||||
|
|
||||||
|
|
|
@ -2,23 +2,36 @@ import pandas as pd
|
||||||
import os
|
import os
|
||||||
import PyLibrary.funciones_comunes as fc
|
import PyLibrary.funciones_comunes as fc
|
||||||
|
|
||||||
|
|
||||||
def exportar_para_traduccion(tipo_PLC, archivo_maestro, target_lang_code):
|
def exportar_para_traduccion(tipo_PLC, archivo_maestro, target_lang_code):
|
||||||
if not os.path.exists(archivo_maestro):
|
if not os.path.exists(archivo_maestro):
|
||||||
print("El archivo maestro no existe.")
|
print("El archivo maestro no existe.")
|
||||||
return
|
return
|
||||||
|
|
||||||
df_maestro = pd.read_excel(archivo_maestro)
|
# Leer el archivo maestro
|
||||||
|
df_maestro = fc.read_dataframe_with_cleanup_retries(archivo_maestro)
|
||||||
|
|
||||||
# Crear un nuevo DataFrame para la exportación
|
# Crear un nuevo DataFrame para la exportación
|
||||||
df_export = pd.DataFrame()
|
df_export = pd.DataFrame()
|
||||||
|
|
||||||
# Copiar la primera columna tal cual
|
# Copiar la primera columna y la columna del idioma de destino
|
||||||
df_export[df_maestro.columns[0]] = df_maestro[df_maestro.columns[0]]
|
primera_columna = df_maestro.columns[0]
|
||||||
|
df_export[primera_columna] = df_maestro[primera_columna]
|
||||||
df_export[target_lang_code] = df_maestro[target_lang_code]
|
df_export[target_lang_code] = df_maestro[target_lang_code]
|
||||||
|
|
||||||
# Guardar el archivo exportado
|
# Guardar el archivo exportado
|
||||||
ruta_export = os.path.join(os.path.dirname(archivo_maestro), f'2_master_export2translate_{tipo_PLC}.xlsx')
|
ruta_export = os.path.join(os.path.dirname(archivo_maestro), f'2_master_export2translate_{tipo_PLC}.xlsx')
|
||||||
fc.save_dataframe_with_retries(df_export,output_path=ruta_export)
|
|
||||||
|
# Usar ExcelWriter para tener más control sobre el proceso de escritura
|
||||||
|
with pd.ExcelWriter(ruta_export, engine='openpyxl') as writer:
|
||||||
|
df_export.to_excel(writer, index=False, sheet_name='Sheet1')
|
||||||
|
|
||||||
|
# Ajustar el ancho de las columnas
|
||||||
|
worksheet = writer.sheets['Sheet1']
|
||||||
|
for idx, col in enumerate(df_export.columns):
|
||||||
|
max_length = max(df_export[col].astype(str).map(len).max(), len(col))
|
||||||
|
if max_length > 50 : max_length = 50
|
||||||
|
worksheet.column_dimensions[chr(65 + idx)].width = max_length + 2
|
||||||
|
|
||||||
print(f"Archivo exportado para traducción: {ruta_export}")
|
print(f"Archivo exportado para traducción: {ruta_export}")
|
||||||
|
|
||||||
|
@ -35,4 +48,4 @@ if __name__ == "__main__":
|
||||||
codigo_columna_maestra = "it-IT"
|
codigo_columna_maestra = "it-IT"
|
||||||
fc.mostrar_idiomas()
|
fc.mostrar_idiomas()
|
||||||
seleccion_idioma = int(input("Introduce el número del idioma de destino: "))
|
seleccion_idioma = int(input("Introduce el número del idioma de destino: "))
|
||||||
run(tipo_PLC, seleccion_idioma)
|
run(tipo_PLC, codigo_columna_maestra, seleccion_idioma)
|
|
@ -13,7 +13,6 @@ from tqdm import tqdm
|
||||||
import PyLibrary.funciones_comunes as fc
|
import PyLibrary.funciones_comunes as fc
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
openai_client = OpenAI(api_key=openai_api_key())
|
openai_client = OpenAI(api_key=openai_api_key())
|
||||||
GOOGLE_APPLICATION_CREDENTIALS = "translate-431108-020c17463fbb.json"
|
GOOGLE_APPLICATION_CREDENTIALS = "translate-431108-020c17463fbb.json"
|
||||||
logger = fc.configurar_logger()
|
logger = fc.configurar_logger()
|
||||||
|
@ -192,8 +191,10 @@ def calcular_afinidad(tipo_PLC, texto1, texto2):
|
||||||
|
|
||||||
return score
|
return score
|
||||||
|
|
||||||
|
|
||||||
def main(tipo_PLC, codigo_columna_maestra, file_path, target_lang_code, target_lang, traducir_todo, batch_size=10):
|
def main(tipo_PLC, codigo_columna_maestra, file_path, target_lang_code, target_lang, traducir_todo, batch_size=10):
|
||||||
df = pd.read_excel(file_path)
|
df = fc.read_dataframe_with_cleanup_retries(file_path)
|
||||||
|
|
||||||
source_col = codigo_columna_maestra
|
source_col = codigo_columna_maestra
|
||||||
source_translated_col = target_lang_code
|
source_translated_col = target_lang_code
|
||||||
target_col = f"{target_lang_code} Translated"
|
target_col = f"{target_lang_code} Translated"
|
||||||
|
|
|
@ -22,8 +22,8 @@ def importar_traduccion(tipo_PLC, archivo_maestro, archivo_traduccion, target_la
|
||||||
translated_col = f"{target_lang_code} Translated"
|
translated_col = f"{target_lang_code} Translated"
|
||||||
affinity_col = f"{target_lang_code} Affinity"
|
affinity_col = f"{target_lang_code} Affinity"
|
||||||
|
|
||||||
df_maestro = pd.read_excel(archivo_maestro)
|
df_maestro = fc.read_dataframe_with_cleanup_retries(archivo_maestro)
|
||||||
df_traduccion = pd.read_excel(archivo_traduccion)
|
df_traduccion = fc.read_dataframe_with_cleanup_retries(archivo_traduccion)
|
||||||
|
|
||||||
# Configurar el logger
|
# Configurar el logger
|
||||||
logger = fc.configurar_logger()
|
logger = fc.configurar_logger()
|
||||||
|
|
|
@ -3,37 +3,38 @@ import pandas as pd
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import logging
|
import logging
|
||||||
|
from openpyxl.utils.escape import unescape
|
||||||
|
|
||||||
def complete_emptys(tipo_PLC, archivo_maestro, target_lang_code, second_lang_code):
|
def complete_emptys(tipo_PLC,codigo_columna_maestra, archivo_maestro, target_lang_code, second_lang_code):
|
||||||
if not os.path.exists(archivo_maestro):
|
if not os.path.exists(archivo_maestro):
|
||||||
print("El archivo maestro no existe.")
|
print("El archivo maestro no existe.")
|
||||||
return
|
return
|
||||||
|
|
||||||
master_col = target_lang_code
|
target_col = target_lang_code
|
||||||
second_col = second_lang_code
|
second_col = second_lang_code
|
||||||
|
|
||||||
df_maestro = pd.read_excel(archivo_maestro)
|
df_maestro = fc.read_dataframe_with_cleanup_retries(archivo_maestro)
|
||||||
|
|
||||||
# Configurar el logger
|
# Configurar el logger
|
||||||
logger = fc.configurar_logger()
|
logger = fc.configurar_logger()
|
||||||
|
|
||||||
# Iterar sobre las filas del archivo de traducción para actualizar el maestro
|
# Iterar sobre las filas del archivo de traducción para actualizar el maestro
|
||||||
for index, fila in df_maestro.iterrows():
|
for index, fila in df_maestro.iterrows():
|
||||||
clave = fila[df_maestro.columns[0]]
|
clave = fila[codigo_columna_maestra]
|
||||||
if fila[master_col] == "" or pd.isnull(fila[master_col]):
|
if fila[target_col] == "" or pd.isnull(fila[target_col]):
|
||||||
if pd.notnull(fila[second_col]) and fila[second_col] != "":
|
if pd.notnull(fila[second_col]) and fila[second_col] != "":
|
||||||
df_maestro.loc[
|
df_maestro.loc[
|
||||||
df_maestro[df_maestro.columns[0]] == clave, master_col
|
df_maestro[codigo_columna_maestra] == clave, target_col
|
||||||
] = fila[second_col]
|
] = fila[second_col]
|
||||||
logger.info(
|
logger.info(
|
||||||
f'Fila {index}, Columna {master_col}: " actualizado a "{fila[second_col]}"'
|
f'Fila {index}, Columna {target_col}: " actualizado a "{fila[second_col]}"'
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
df_maestro.loc[
|
df_maestro.loc[
|
||||||
df_maestro[df_maestro.columns[0]] == clave, master_col
|
df_maestro[codigo_columna_maestra] == clave, target_col
|
||||||
] = fc.compactar_celda_traducida(tipo_PLC, fila[df_maestro.columns[0]])
|
] = fc.compactar_celda_traducida(tipo_PLC, fila[codigo_columna_maestra])
|
||||||
logger.info(
|
logger.info(
|
||||||
f'Fila {index}, Columna {master_col}: " actualizado a "{fila[df_maestro.columns[0]]}"'
|
f'Fila {index}, Columna {target_col}: " actualizado a "{fila[codigo_columna_maestra]}"'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Guardar el archivo maestro actualizado
|
# Guardar el archivo maestro actualizado
|
||||||
|
@ -57,7 +58,7 @@ def run(tipo_PLC, codigo_columna_maestra, seleccion_idioma, seleccion_idioma_sec
|
||||||
|
|
||||||
_, target_lang_code = fc.IDIOMAS[seleccion_idioma]
|
_, target_lang_code = fc.IDIOMAS[seleccion_idioma]
|
||||||
_, second_lang_code = fc.IDIOMAS[seleccion_idioma_secundario]
|
_, second_lang_code = fc.IDIOMAS[seleccion_idioma_secundario]
|
||||||
complete_emptys(tipo_PLC, archivo_maestro, target_lang_code, second_lang_code)
|
complete_emptys(tipo_PLC, codigo_columna_maestra, archivo_maestro, target_lang_code, second_lang_code)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
tipo_PLC = "siemens"
|
tipo_PLC = "siemens"
|
||||||
|
|
|
@ -3,9 +3,9 @@ import os
|
||||||
import re
|
import re
|
||||||
import logging
|
import logging
|
||||||
import PyLibrary.funciones_comunes as fc
|
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):
|
||||||
def update_from_master(tipo_PLC, archivo_maestro, archivo_to_update, target_lang_code):
|
|
||||||
if not os.path.exists(archivo_maestro):
|
if not os.path.exists(archivo_maestro):
|
||||||
print("El archivo maestro no existe.")
|
print("El archivo maestro no existe.")
|
||||||
return
|
return
|
||||||
|
@ -18,17 +18,22 @@ def update_from_master(tipo_PLC, archivo_maestro, archivo_to_update, target_lang
|
||||||
f"Iniciando actualizacion en {archivo_to_update} desde el archivo maestro. Para {target_lang_code} "
|
f"Iniciando actualizacion en {archivo_to_update} desde el archivo maestro. Para {target_lang_code} "
|
||||||
)
|
)
|
||||||
|
|
||||||
df_maestro = pd.read_excel(archivo_maestro)
|
df_maestro = fc.read_dataframe_with_cleanup_retries(archivo_maestro)
|
||||||
df_to_update = pd.read_excel(archivo_to_update)
|
df_to_update = fc.read_dataframe_with_cleanup_retries(archivo_to_update)
|
||||||
|
|
||||||
col_clave = df_maestro.columns[0]
|
col_clave = codigo_columna_maestra
|
||||||
|
|
||||||
# Iterar sobre las filas del archivo de actualización para actualizarlas
|
# Iterar sobre las filas del archivo de actualización para actualizarlas
|
||||||
for index, fila in df_to_update.iterrows():
|
for index, fila in df_to_update.iterrows():
|
||||||
clave = fila[col_clave]
|
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:
|
if not pd.isnull(clave) and clave in df_maestro[col_clave].values:
|
||||||
# Obtenemos los valores
|
# Obtenemos los valores
|
||||||
valor_original = fila[col_clave]
|
|
||||||
valor_traducido_compacto = df_maestro.loc[
|
valor_traducido_compacto = df_maestro.loc[
|
||||||
df_maestro[col_clave] == clave, target_lang_code
|
df_maestro[col_clave] == clave, target_lang_code
|
||||||
].values[0]
|
].values[0]
|
||||||
|
@ -36,23 +41,21 @@ def update_from_master(tipo_PLC, archivo_maestro, archivo_to_update, target_lang
|
||||||
valor_traducido = fc.decompactar_celda_traducida(tipo_PLC,
|
valor_traducido = fc.decompactar_celda_traducida(tipo_PLC,
|
||||||
celda_original=valor_original, celda_traducida=valor_traducido_compacto
|
celda_original=valor_original, celda_traducida=valor_traducido_compacto
|
||||||
)
|
)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
not pd.isnull(valor_traducido)
|
not pd.isnull(valor_traducido)
|
||||||
and fila[target_lang_code] != valor_traducido
|
and fila[target_lang_code] != valor_traducido
|
||||||
):
|
):
|
||||||
# Salvamos en el file to Update
|
# Salvamos en el file to Update
|
||||||
okToSave, Error = fc.verificar_celda_traducida(tipo_PLC,
|
okToSave, Error = fc.verificar_celda_traducida(tipo_PLC,
|
||||||
valor_original, valor_traducido_compacto
|
clave, valor_traducido_compacto
|
||||||
)
|
)
|
||||||
if okToSave:
|
if okToSave:
|
||||||
logger.info(
|
logger.info("Actualizado.")
|
||||||
f'Fila {index} : Clave: {clave}, Columna {target_lang_code}: "{valor_original}" actualizado a "{valor_traducido}"'
|
|
||||||
)
|
|
||||||
df_to_update.at[index, target_lang_code] = valor_traducido
|
df_to_update.at[index, target_lang_code] = valor_traducido
|
||||||
else:
|
else:
|
||||||
|
df_to_update.at[index, target_lang_code] = valor_original
|
||||||
logger.error(
|
logger.error(
|
||||||
f'Fila {index}, Columna {target_lang_code}: "{df_to_update.at[index, target_lang_code]}" valor:"{valor_traducido}" no actualizado porque {Error}'
|
f'No actualizado porque: {Error}'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Guardar el archivo actualizado
|
# Guardar el archivo actualizado
|
||||||
|
@ -75,7 +78,7 @@ def run(tipo_PLC, codigo_columna_maestra, seleccion_idioma) :
|
||||||
print("Selección inválida.")
|
print("Selección inválida.")
|
||||||
else:
|
else:
|
||||||
_, target_lang_code = fc.IDIOMAS[seleccion_idioma]
|
_, target_lang_code = fc.IDIOMAS[seleccion_idioma]
|
||||||
update_from_master(tipo_PLC, archivo_maestro, archivo_to_update, target_lang_code)
|
update_from_master(tipo_PLC, codigo_columna_maestra, archivo_maestro, archivo_to_update, target_lang_code)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
tipo_PLC = "siemens"
|
tipo_PLC = "siemens"
|
||||||
|
|
Loading…
Reference in New Issue