import pandas as pd import csv def filtrar_i_consolidar_etiquetes(tags_str): """Filtra i agrupa les etiquetes segons les regles de negoci.""" if pd.isna(tags_str) or str(tags_str).strip().lower() == 'nan': return '' # 1. Separem les etiquetes i les netegem llista_tags = [t.strip().lower() for t in str(tags_str).split(',')] # Utilitzem un 'set' per evitar etiquetes duplicades al final tags_finals = set() for t in llista_tags: # 2. Regla de conservació directa: test_, int_ i rrhh if t.startswith('test_') or t.startswith('int_') or t == 'rrhh': tags_finals.add(t) continue # 3. Regles d'agrupació (l'ordre és important per als prefixos llargs) if t.startswith('skupspo2-') or t.startswith('pspo2-'): tags_finals.add('pspo2') elif t.startswith('pspo-'): tags_finals.add('pspo') elif t.startswith('psm2-'): tags_finals.add('psm2') elif t.startswith('psm-'): tags_finals.add('psm') elif t.startswith('psux-') or t.startswith('psu-'): tags_finals.add('psu') elif t.startswith('sps-'): tags_finals.add('sps') elif t.startswith('safe-'): tags_finals.add('safe-ls') elif t.startswith('pal_ebm-'): tags_finals.add('pal_ebm') elif t.startswith('pal-'): tags_finals.add('pal') # 4. Si tenim etiquetes vàlides, les ordenem, les unim amb | i hi posem cometes if tags_finals: # Ordenar-les (sorted) fa que el resultat sigui més fàcil de llegir al CSV tags_units = '|'.join(sorted(list(tags_finals))) return f'"{tags_units}"' else: return '' # --- INICI DEL PROCÉS --- # 1. Carregar el fitxer original df = pd.read_excel('contactes_mautic/Contactos_2602026_7881pax.xlsx') # 2. Seleccionar només les columnes que ens interessen columnes_mautic = ['email', 'nombre_x', 'apellidos_x', '*ciudad_x', '*pais_x', 'etiquetas_x'] df_net = df[columnes_mautic].copy() # 3. Reanomenar les columnes perquè Mautic les auto-detecti df_net.rename(columns={ 'nombre_x': 'firstname', 'apellidos_x': 'lastname', '*ciudad_x': 'city', '*pais_x': 'country', 'etiquetas_x': 'etiquetes' }, inplace=True) # 4. APLICAR EL FILTRE I LA CONSOLIDACIÓ df_net['etiquetes'] = df_net['etiquetes'].apply(filtrar_i_consolidar_etiquetes) # 5. Guardar com a CSV llest per importar df_net.to_csv('Contactes_Mautic_Consolidats.csv', index=False, encoding='utf-8', quoting=csv.QUOTE_NONE, escapechar='\\') print("✅ Fitxer preparat! Les etiquetes s'han filtrat i agrupat correctament.")