91 lines
3.5 KiB
Python
91 lines
3.5 KiB
Python
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)
|