import pandas as pd import os import re from manejoArchivos import select_file 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 sustituir_digitos(celda): # Convertir a cadena y sustituir secuencias de dígitos por [[digits]] if pd.isnull(celda): return celda return re.sub(r'\d+', '[[digits]]', str(celda)) def preprocesar_importacion(df_importacion): # Iterar sobre las filas del DataFrame de importación for index, fila in df_importacion.iterrows(): clave_original = str(fila['it-IT']) clave_sustituida = sustituir_digitos(clave_original) # Sustituir en las demás columnas del tipo "xx-YY" for columna in df_importacion.columns: if columna != 'it-IT' and es_columna_tipo_xxYY(columna): df_importacion.at[index, columna] = sustituir_digitos(fila[columna]) # Guardar la clave sustituida df_importacion.at[index, 'it-IT'] = clave_sustituida return df_importacion def importar(archivo_maestro, archivo_importacion): if not os.path.exists(archivo_maestro): # Crear un DataFrame maestro vacío con la columna "it-IT" df_maestro = pd.DataFrame(columns=["it-IT"]) else: df_maestro = pd.read_excel(archivo_maestro) df_importacion = pd.read_excel(archivo_importacion) # Preprocesar el archivo de importación df_importacion = preprocesar_importacion(df_importacion) # Obtener las claves existentes en el archivo maestro claves_maestro = set(df_maestro["it-IT"].dropna().astype(str)) # Filtrar filas del archivo de importación que no están en el archivo maestro nuevas_filas = df_importacion[ df_importacion["it-IT"].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 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 = [] # Iterar sobre las nuevas filas para agregarlas y actualizar las claves for _, fila in nuevas_filas.iterrows(): clave = str(fila["it-IT"]) if clave not in claves_maestro: claves_maestro.add(clave) # Solo agregar las columnas del tipo "xx-YY" y "it-IT" fila_filtrada = {col: fila[col] for col in fila.index if col == "it-IT" or es_columna_tipo_xxYY(col)} filas_a_agregar.append(fila_filtrada) # Concatenar las nuevas filas al DataFrame maestro if filas_a_agregar: 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) print(f"Se han agregado {len(filas_a_agregar)} nuevas filas al archivo maestro.") if __name__ == "__main__": # Cargar el archivo maestro y el archivo de importación archivo_maestro = "hmi_master_translates.xlsx" archivo_importacion = select_file("xlsx") if archivo_importacion: importar(archivo_maestro, archivo_importacion)