73 lines
2.7 KiB
Python
73 lines
2.7 KiB
Python
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.") |