diff --git a/config.ini b/config.ini index 80da54a..e29a571 100644 --- a/config.ini +++ b/config.ini @@ -95,7 +95,6 @@ output_text = Ejecutando x1_importar_to_master.run() Traducciones importadas y archivo maestro actualizado: .\data\1_hmi_master_translates_allenbradley.xlsx. Ejecutando x6_update_from_master.run() 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/HMI/HMI_93953_25.xlsx desde el archivo maestro. diff --git a/funciones_comunes/__init__.py b/funciones_comunes/__init__.py deleted file mode 100644 index 304220e..0000000 --- a/funciones_comunes/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .funciones_base import * \ No newline at end of file diff --git a/funciones_comunes/__pycache__/__init__.cpython-310.pyc b/funciones_comunes/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 6a9da69..0000000 Binary files a/funciones_comunes/__pycache__/__init__.cpython-310.pyc and /dev/null differ diff --git a/funciones_comunes/__pycache__/funciones_base.cpython-310.pyc b/funciones_comunes/__pycache__/funciones_base.cpython-310.pyc deleted file mode 100644 index 98f6f47..0000000 Binary files a/funciones_comunes/__pycache__/funciones_base.cpython-310.pyc and /dev/null differ diff --git a/funciones_comunes/funciones_base.py b/funciones_comunes/funciones_base.py deleted file mode 100644 index 6a54b6d..0000000 --- a/funciones_comunes/funciones_base.py +++ /dev/null @@ -1,466 +0,0 @@ -import re -import time -import pandas as pd -from openpyxl import load_workbook -import logging -import os - -# Diccionario de idiomas -IDIOMAS = { - 0: ("Italian", "it-IT"), - 1: ("English", "en-GB"), - 2: ("Portuguese", "pt-PT"), - 3: ("Spanish", "es-ES"), - 4: ("Russian", "ru-RU"), - 5: ("French", "fr-FR"), - 6: ("German", "de-DE"), - 7: ("English_US", "en-US"), -} - - -# Función para obtener el shortcode a partir del código completo -def idiomas_shortcodefromcode(code): - if code: - return code.split('-')[0] - return None # O puedes lanzar una excepción si prefieres - -# Función para obtener el idioma a partir del código -def idiomas_idiomafromcode(code): - for idx, (idioma, codigo) in IDIOMAS.items(): - if codigo == code: - return idioma - return None # O puedes lanzar una excepción si prefieres - -# Función para obtener el código a partir del idioma -def idiomas_codefromidioma(idioma): - for idx, (nombre_idioma, codigo) in IDIOMAS.items(): - if nombre_idioma == idioma: - return codigo - return None # O lanzar una excepción - -# Función para verificar si un código existe -def idiomas_existecode(code): - return any(codigo == code for idx, (idioma, codigo) in IDIOMAS.items()) - -# Función para verificar si un idioma existe -def idiomas_existeidioma(idioma): - return any(nombre_idioma == idioma for idx, (nombre_idioma, codigo) in IDIOMAS.items()) - -# Función para obtener el idioma a partir del índice -def idiomas_idiomafromindex(index): - if index in IDIOMAS: - return IDIOMAS[index][0] - else: - return None # O lanzar una excepción - -# Función para obtener el código a partir del índice -def idiomas_codefromindex(index): - if index in IDIOMAS: - return IDIOMAS[index][1] - else: - return None # O lanzar una excepción - -# Función para obtener el índice a partir del código -def idiomas_indexfromcode(code): - for idx, (idioma, codigo) in IDIOMAS.items(): - if codigo == code: - return idx - return None # O lanzar una excepción - -# Función para obtener el índice a partir del idioma -def idiomas_indexfromidioma(idioma): - for idx, (nombre_idioma, codigo) in IDIOMAS.items(): - if nombre_idioma == idioma: - return idx - return None # O lanzar una excepción - - -def mostrar_idiomas(): - print("Selecciona el idioma de destino:") - for numero, (nombre, _) in IDIOMAS.items(): - print(f"{numero}: {nombre}") - - -def configurar_logger(): - logger = logging.getLogger("translate_logger") - logger.setLevel(logging.DEBUG) - os.makedirs(".\\logs", exist_ok=True) - fh = logging.FileHandler(".\\logs\\translate_log.log", encoding="utf-8") - fh.setLevel(logging.DEBUG) - formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s : ") - fh.setFormatter(formatter) - logger.addHandler(fh) - return logger - -# -# Salvar archivo Excel controlando que no este abierto. Sino espera. -# -def save_dataframe_with_retries(df, output_path, max_retries=5, retry_delay=5): - """ - Guarda un DataFrame en un archivo Excel, reintentando si el archivo está en uso. - - :param df: El DataFrame a guardar. - :param output_path: La ruta del archivo donde se guardará el DataFrame. - :param max_retries: El número máximo de reintentos en caso de error. - :param retry_delay: El tiempo de espera (en segundos) entre cada reintento. - """ - retries = 0 - while retries < max_retries: - try: - df.to_excel(output_path, sheet_name="User Texts", index=False) - print("Archivo guardado exitosamente.") - return - except PermissionError as e: - print( - f"Error de permiso: {e}. Por favor cierre el archivo. Reintentando en {retry_delay} segundos..." - ) - retries += 1 - time.sleep(retry_delay) - - print(f"No se pudo guardar el archivo después de {max_retries} intentos.") - - -def cambiar_nombre_hoja(archivo_excel, nombre_hoja_actual, nombre_hoja_nuevo): - # Cargar el archivo Excel existente - libro = load_workbook(archivo_excel) - - # Verificar si la hoja existe en el archivo - if nombre_hoja_actual in libro.sheetnames: - # Obtener la hoja actual - hoja = libro[nombre_hoja_actual] - # Cambiar el nombre de la hoja - hoja.title = nombre_hoja_nuevo - # Guardar los cambios en el archivo Excel - libro.save(archivo_excel) - print( - f"El nombre de la hoja ha sido cambiado de '{nombre_hoja_actual}' a '{nombre_hoja_nuevo}'." - ) - else: - print(f"La hoja '{nombre_hoja_actual}' no existe en el archivo.") - -# Verificar si la columna es del tipo "xx-YY" usando una expresión regular -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 compactar_celda_clave(tipo_PLC, celda_original): - if tipo_PLC == "siemens" : - return compactar_celda_clave_siemens(celda_original) - else : - return compactar_celda_clave_ab(celda_original) - -def compactar_celda_traducida(tipo_PLC, celda_traducida): - if tipo_PLC == "siemens" : - return compactar_celda_traducida_siemens(celda_traducida) - else : - return compactar_celda_traducida_ab(celda_traducida) - -def obtener_digitos_celda_original(tipo_PLC, celda_original): - if tipo_PLC == "siemens" : - return obtener_digitos_celda_original_siemens(celda_original) - else : - return obtener_digitos_celda_original_ab(celda_original) - -def decompactar_celda_traducida(tipo_PLC, celda_original, celda_traducida): - if tipo_PLC == "siemens" : - return decompactar_celda_traducida_siemens(celda_original, celda_traducida) - else : - return decompactar_celda_traducida_ab(celda_original, celda_traducida) - -def verificar_celda_traducida(tipo_PLC, celda_clave, celda_traducida): - if tipo_PLC == "siemens" : - return verificar_celda_traducida_siemens(celda_clave, celda_traducida) - else : - return verificar_celda_traducida_ab(celda_clave, celda_traducida) - -def texto_requiere_traduccion(tipo_PLC, texto, logger): - if tipo_PLC == "siemens" : - return texto_requiere_traduccion_siemens(texto, logger) - else : - return texto_requiere_traduccion_ab(texto, logger) - -def texto_con_campos_especiales(tipo_PLC, texto): - if tipo_PLC == "siemens" : - return texto_con_campos_especiales_siemens(texto) - else : - return texto_con_campos_especiales_ab(texto) - - - -# SIEMENS -# -# Transforma: "A271/47/6 Air - M - Necessaria Manutenzione Filtro" -> -# "A[[digits]]/[[digits]]/[[digits]] Air - M - Necessaria Manutenzione Filtro" -# -# Este procesamiento se aplica a las celdas clave -def compactar_celda_clave_siemens(celda_original): - if pd.isnull(celda_original): - return celda_original - - def reemplazar(match): - if match.group(1): # Si hay contenido dentro de <> - return f"<{match.group(1)}>" - return "[[digits]]" - - # Reemplaza dígitos fuera de <> con [[digits]], y preserva el contenido dentro de <> - return re.sub(r"<(.*?)>|\d+", reemplazar, str(celda_original)) - - -# SIEMENS -def texto_requiere_traduccion_siemens(texto, logger): - palabras = re.findall(r"\b\w{4,}\b", texto) - campos_especiales = re.findall(r"<.*?>", texto) - requiere_traduccion = len(palabras) > 0 or len(campos_especiales) != len( - re.findall(r"<#>", texto) - ) - logger.debug( - f"Decisión de traducción para texto '{texto}': {'Sí' if requiere_traduccion else 'No'} (palabras > 3 letras: {len(palabras) > 0}, solo campos especiales: {len(campos_especiales) == len(re.findall(r'<#>', texto))})" - ) - return requiere_traduccion - -# SIEMENS -def texto_con_campos_especiales_siemens(texto): - campos_especiales = len(re.findall(r"<#>", texto) ) - return campos_especiales > 0 - - - -# SIEMENS -# -# Transforma: "A[[digits]]/[[digits]]/[[digits]] Air - M - Necessaria Manutenzione Filtro" -> -# "A<>/<>/<> Air - M<#>" /> - Necessaria Manutenzione Filtro" -# -# Este procesamiento se aplica a las celdas traducidas -def compactar_celda_traducida_siemens(celda_traducida): - if pd.isnull(celda_traducida): - return celda_traducida - celda_traducida = compactar_celda_clave_siemens(celda_traducida) - - def reemplazar(match): - if match.group(1): # Si hay contenido dentro de <> - return "<#>" - return "<>" - - # Reemplaza <...> con <#> y [[digits]] con <> - return re.sub(r"<(.*?)>|\[\[digits\]\]", reemplazar, str(celda_traducida)) - -# SIEMENS -# de "A271/47/6 Air - M - Necessaria Manutenzione Filtro" -> [271,47,6] -# Obtener la secuencias de dígitos por [[digits]] -def obtener_digitos_celda_original_siemens(celda_original): - if pd.isnull(celda_original): - return [] - - # Primero, reemplazamos temporalmente el contenido de los tags con un marcador - texto_sin_tags = re.sub(r'<[^>]*>', '<>', str(celda_original)) - - # Ahora buscamos los dígitos - digitos = re.findall(r'\d+', texto_sin_tags) - - return digitos - -# SIEMENS -# Original Traducida -# Transforma: "A271/47/6 Air - M - Necessaria Manutenzione Filtro" , "A<>/<>/<> Air - M<#> - Filter Maintenance Required" -> -# "A271/47/6 Air - M - Necessaria Manutenzione Filtro" -# -# Este procesamiento se aplica a las celdas traducidas para regresar al valor original -def decompactar_celda_traducida_siemens(celda_original, celda_traducida): - digitos = obtener_digitos_celda_original_siemens(celda_original) - celda_destino = celda_traducida - - # Replace <> with digits - for d in digitos: - celda_destino = celda_destino.replace("<>", d, 1) - - # Replace <#> with original content within <> - original_tags = re.findall(r"<.*?>", celda_original) - translated_tags = re.findall(r"<#>", celda_destino) - - for orig, trans in zip(original_tags, translated_tags): - celda_destino = celda_destino.replace(trans, orig, 1) - - return celda_destino - - -# -# SIEMENS -# -def verificar_celda_traducida_siemens(celda_clave, celda_traducida): - # Contar los placeholders de dígitos - digitos_clave = celda_clave.count("[[digits]]") - digitos_traducida = celda_traducida.count("<>") - - # Contar los placeholders de tags - tags_clave = sum(1 for tag in re.findall(r"<.*?>", celda_clave) if tag != "[[digits]]") - tags_traducida = celda_traducida.count("<#>") - - # Verificar si las cantidades coinciden - if digitos_clave == digitos_traducida and tags_clave == tags_traducida: - return True , "" - else: - text_error = f"Error de verificación:" + f" - Celda clave: {celda_clave}" + f" - Celda traducida: {celda_traducida}" - text_error += f" - Dígitos en clave: {digitos_clave}, Dígitos en traducida: {digitos_traducida}" - text_error += f" - Tags en clave: {tags_clave}, Tags en traducida: {tags_traducida}" - return False, text_error - - -# ALLEN BRADLEY -def texto_requiere_traduccion_ab(texto, logger): - palabras = re.findall(r"\b\w{4,}\b", texto) - campos_especiales = re.findall(r"/\*.*?\*/", texto) - total_palabras_largas = len(palabras) > 0 - total_campos_especiales = len(campos_especiales) - total_campos_marcados = len(re.findall(r"/\*#\*/", texto)) - solo_campos_especiales = total_campos_especiales == total_campos_marcados - requiere_traduccion = total_palabras_largas or not solo_campos_especiales - - logger.debug( - f"Decisión de traducción para texto '{texto}': {'Sí' if requiere_traduccion else 'No'} " - f"(palabras > 3 letras: {total_palabras_largas}, " - f"solo campos especiales: {solo_campos_especiales})" - ) - return requiere_traduccion - - - -# ALLEN BRADLEY -# Transforma: "A271/47/6 Air - M/*field ref="0" */ - Necessaria Manutenzione Filtro" -> -# "A[[digits]]/[[digits]]/[[digits]] Air - M/*field ref="[[digits]]" */ - Necessaria Manutenzione Filtro" -# -# Este procesamiento se aplica a las celdas clave -def compactar_celda_clave_ab(celda_original): - if pd.isnull(celda_original): - return celda_original - - def reemplazar(match): - if match.group(1): # Si hay contenido dentro de /*...*/ - return f"/*{match.group(1)}*/" - return "[[digits]]" - - # Reemplaza dígitos fuera de /*...*/ con [[digits]], y preserva el contenido dentro de /*...*/ - return re.sub(r"/\*(.*?)\*/|\d+", reemplazar, str(celda_original)) - - -# ALLEN BRADLEY -# Transforma: "A[[digits]]/[[digits]]/[[digits]] Air - M/*field ref="[[digits]]" */ - Necessaria Manutenzione Filtro" -> -# "A<>/<>/<> Air - M/*#*/ - Necessaria Manutenzione Filtro" -# -# Este procesamiento se aplica a las celdas traducidas -def compactar_celda_traducida_ab(celda_traducida): - if pd.isnull(celda_traducida): - return celda_traducida - celda_traducida = compactar_celda_clave_ab(celda_traducida) - - def reemplazar(match): - if match.group(1): # Si hay contenido dentro de /*...*/ - return "/*#*/" - return "<>" - - # Reemplaza /*...*/ con /*#*/ y [[digits]] con <> - return re.sub(r"/\*(.*?)\*/|\[\[digits\]\]", reemplazar, str(celda_traducida)) - - -# ALLEN BRADLEY -# De "A271/47/6 Air - M/*field ref="0" */ - Necessaria Manutenzione Filtro" -> [271,47,6] -# Obtener las secuencias de dígitos para [[digits]] -def obtener_digitos_celda_original_ab(celda_original): - if pd.isnull(celda_original): - return [] - - # Reemplazamos temporalmente el contenido de los comentarios con un marcador - texto_sin_tags = re.sub(r'/\*[^*]*\*/', '<>', str(celda_original)) - - # Ahora buscamos los dígitos - digitos = re.findall(r'\d+', texto_sin_tags) - - return digitos - - -# ALLEN BRADLEY -# Transformación para regresar al valor original -def decompactar_celda_traducida_ab(celda_original, celda_traducida): - digitos = obtener_digitos_celda_original_ab(celda_original) - celda_destino = celda_traducida - - # Reemplaza <> con dígitos - for d in digitos: - celda_destino = celda_destino.replace("<>", d, 1) - - # Reemplaza /*#*/ con el contenido original dentro de /*...*/ - original_tags = re.findall(r"/\*.*?\*/", celda_original) - translated_tags = re.findall(r"/\*#\*/", celda_destino) - - for orig, trans in zip(original_tags, translated_tags): - celda_destino = celda_destino.replace(trans, orig, 1) - - return celda_destino - - -# -# ALLEN BRADLEY -# -def verificar_celda_traducida_ab(celda_clave, celda_traducida): - # Contar los placeholders de dígitos - digitos_clave = celda_clave.count("[[digits]]") - digitos_traducida = celda_traducida.count("<>") - - # Contar los placeholders de comentarios - tags_clave = sum(1 for tag in re.findall(r"/\*.*?\*/", celda_clave) if tag != "[[digits]]") - tags_traducida = celda_traducida.count("/*#*/") - - # Verificar si las cantidades coinciden - if digitos_clave == digitos_traducida and tags_clave == tags_traducida: - return True, "" - else: - text_error = f"Error de verificación:" + f" - Celda clave: {celda_clave}" + f" - Celda traducida: {celda_traducida}" - text_error += f" - Dígitos en clave: {digitos_clave}, Dígitos en traducida: {digitos_traducida}" - text_error += f" - Comentarios en clave: {tags_clave}, Comentarios en traducida: {tags_traducida}" - return False, text_error - - -# -# ALLEN BRADLEY -# -def texto_con_campos_especiales_ab(texto): - campos_especiales = len(re.findall(r"/\*#\*/", texto)) - return campos_especiales > 0 - - -if __name__ == "__main__": - # SIEMENS - print("****************** SIEMENS ***************************") - celda_original = 'A271/47/6 Air - M - Necessaria Manutenzione Filtro' - celda_original = 'DB/DB/DB' - celda_original = 'Text' - - celda_clave = compactar_celda_clave_siemens(celda_original) - celda_tradc = compactar_celda_traducida_siemens(celda_original) + " TEXTO " - - print() - print("Celda Original : " +celda_original) - print("Celda Clave : " + celda_clave) - print("Celda Traducida: " + celda_tradc) - print("Digitos : " + ','.join(obtener_digitos_celda_original_siemens(celda_original))) - print("Celda : " + decompactar_celda_traducida_siemens(celda_original, celda_tradc)) - print("Celda Original : " + celda_original) - - print(verificar_celda_traducida_siemens(celda_clave=celda_clave, celda_traducida= celda_tradc)) - - # ALLEN BRADLEY - print("****************** ALLEN BRADLEY ***************************") - celda_original = 'A271/47/6 /*N:4 {#1.#4.VFix[1]} NOFILL DP:1*/ m/min SPEED' - - celda_clave = compactar_celda_clave_ab(celda_original) - celda_tradc = compactar_celda_traducida_ab(celda_original) + " TEXTO " - - print() - print("Celda Original : " +celda_original) - print("Celda Clave : " + celda_clave) - print("Celda Traducida: " + celda_tradc) - print("Digitos : " + ','.join(obtener_digitos_celda_original_ab(celda_original))) - print("Celda : " + decompactar_celda_traducida_ab(celda_original, celda_tradc)) - print("Celda Original : " + celda_original) - - print(verificar_celda_traducida_ab(celda_clave=celda_clave, celda_traducida= celda_tradc)) diff --git a/manejoArchivos.py b/manejoArchivos.py deleted file mode 100644 index bc9fcca..0000000 --- a/manejoArchivos.py +++ /dev/null @@ -1,50 +0,0 @@ -import pandas as pd -import tkinter as tk -from tkinter import filedialog -import os -import subprocess - -def select_file(extension = "txt"): - """ - Opens a file dialog to select a .db file and returns the selected file path. - """ - root = tk.Tk() - root.withdraw() # Use to hide the tkinter root window - - # Open file dialog and return the selected file path - file_path = filedialog.askopenfilename( - title=f"Select a .{extension} file", - filetypes=((f"{extension} files", f"*.{extension}"), ("All files", "*.*")) - ) - return file_path - -def open_file_explorer(path): - """ - Opens the file explorer at the given path, correctly handling paths with spaces. - """ - # Normalize the path to ensure it's in the correct format - normalized_path = os.path.normpath(path) - - # Check if the path is a directory or a file and format the command accordingly - if os.path.isdir(normalized_path): - # If it's a directory, use the 'explorer' command directly - command = f'explorer "{normalized_path}"' - else: - # If it's a file, use the 'explorer /select,' command to highlight the file in its folder - command = f'explorer /select,"{normalized_path}"' - - # Execute the command using subprocess.run, with shell=True to handle paths with spaces correctly - subprocess.run(command, shell=True) - -def select_directory(): - """ - Opens a file dialog to select a directory and returns the selected directory path. - """ - root = tk.Tk() - root.withdraw() # Use to hide the tkinter root window - - # Open directory dialog and return the selected directory path - directory_path = filedialog.askdirectory( - title="Select a directory" - ) - return directory_path \ No newline at end of file diff --git a/menu_pasos_traduccion.py b/menu_pasos_traduccion.py index efe75a4..aa85ad8 100644 --- a/menu_pasos_traduccion.py +++ b/menu_pasos_traduccion.py @@ -1,7 +1,7 @@ import tkinter as tk from tkinter import ttk from tkinter import messagebox -import funciones_comunes as fc +from ...Library.Python import funciones_comunes as fc import x1_importar_to_master import x2_master_export2translate import x3_llm_auto_translate diff --git a/x1_importar_to_master.py b/x1_importar_to_master.py index eb527bc..b8dcffe 100644 --- a/x1_importar_to_master.py +++ b/x1_importar_to_master.py @@ -1,8 +1,7 @@ import pandas as pd import os import re -from manejoArchivos import select_file -import funciones_comunes as fc +from ...Library.Python import funciones_comunes as fc def preprocesar_importacion(tipo_PLC, codigo_columna_maestra, df_importacion): # Iterar sobre las filas del DataFrame de importación @@ -87,7 +86,7 @@ def importar(tipo_PLC, codigo_columna_maestra, archivo_maestro, archivo_importac 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_importacion = select_file("xlsx") + archivo_importacion = fc.select_file("xlsx") if archivo_importacion: importar(tipo_PLC, codigo_columna_maestra, archivo_maestro, archivo_importacion) diff --git a/x2_master_export2translate.py b/x2_master_export2translate.py index bdc129b..ab870a2 100644 --- a/x2_master_export2translate.py +++ b/x2_master_export2translate.py @@ -1,7 +1,6 @@ import pandas as pd import os -from manejoArchivos import select_file -import funciones_comunes as fc +from ...Library.Python import funciones_comunes as fc def exportar_para_traduccion(tipo_PLC, archivo_maestro, target_lang_code): if not os.path.exists(archivo_maestro): diff --git a/x3_llm_auto_translate.py b/x3_llm_auto_translate.py index 687ca92..7cdb888 100644 --- a/x3_llm_auto_translate.py +++ b/x3_llm_auto_translate.py @@ -10,7 +10,7 @@ from google.cloud import translate_v2 as translate from google.oauth2 import service_account import html from tqdm import tqdm -import funciones_comunes as fc +from ...Library.Python import funciones_comunes as fc import time diff --git a/x4_integrate_translates_to_master.py b/x4_integrate_translates_to_master.py index f15eceb..7df8468 100644 --- a/x4_integrate_translates_to_master.py +++ b/x4_integrate_translates_to_master.py @@ -1,9 +1,8 @@ -import funciones_comunes as fc +from ...Library.Python import funciones_comunes as fc import pandas as pd import os import re import logging -from manejoArchivos import select_file def revertir_transformaciones(texto, digitos, secciones): # Revertir <> a [[digits]] diff --git a/x5_complete_empty_cells_master.py b/x5_complete_empty_cells_master.py index c9bc1c0..da4a0e5 100644 --- a/x5_complete_empty_cells_master.py +++ b/x5_complete_empty_cells_master.py @@ -1,10 +1,8 @@ -import funciones_comunes as fc +from ...Library.Python import funciones_comunes as fc import pandas as pd import os import re import logging -from manejoArchivos import select_file - def complete_emptys(tipo_PLC, archivo_maestro, target_lang_code, second_lang_code): if not os.path.exists(archivo_maestro): diff --git a/x6_update_from_master.py b/x6_update_from_master.py index 36d536e..5e3ce3d 100644 --- a/x6_update_from_master.py +++ b/x6_update_from_master.py @@ -2,8 +2,7 @@ import pandas as pd import os import re import logging -import funciones_comunes as fc -from manejoArchivos import select_file +from ...Library.Python import funciones_comunes as fc def update_from_master(tipo_PLC, archivo_maestro, archivo_to_update, target_lang_code): @@ -70,7 +69,7 @@ def update_from_master(tipo_PLC, archivo_maestro, archivo_to_update, target_lang def run(tipo_PLC, codigo_columna_maestra, seleccion_idioma) : archivo_maestro = f".\\data\\1_hmi_master_translates_{tipo_PLC}.xlsx" - archivo_to_update = select_file("xlsx") + archivo_to_update = fc.select_file("xlsx") if archivo_to_update: if seleccion_idioma not in fc.IDIOMAS: print("Selección inválida.")