#1 Le 05/01/2014, à 15:39
- MaryPopy
Effacer les doublons d'un fichier .vcf (liste de contact)
Bonjour,
Avec les années et de multiple changements de mobile, j'ai mes contacts présent à 10 exemplaires parfois.
Je ne trouve pas de logiciel qui le fasse. Pourriez vous me donner une commande ? Si c'est possible. Ou m'indiquer un logiciel.
Merci.
Dernière modification par MaryPopy (Le 05/11/2021, à 23:13)
Photographe : http://www.vouillamozweb.ch
Hors ligne
#2 Le 05/01/2014, à 17:24
- pingouinux
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
Bonjour,
Voici un script en python qui recherche les séquences BEGIN:VCARD ..... END:VCARD dans le fichier d'entrée, et ne laisse qu'un seul exemplaire des séquences rigoureusement identiques.
Voici le script menage_vcf.py
#! /usr/bin/python
import sys, re
rec=re.compile('(^BEGIN:VCARD.*?^END:VCARD)([\x0d\x0a]*)',re.M|re.S)
resul=set()
with open(sys.argv[1],'r') as f, open(sys.argv[2],'w') as g :
fic=f.read()
while True :
k=rec.search(fic)
if(k) :
contact=k.group(1)
g.write(fic[:k.start(1)])
if contact not in resul :
g.write(contact)
g.write(k.group(2))
resul.add(contact)
fic=fic[k.end(2):]
else :
g.write(fic)
break
Utilisation
./menage_vcf.py fichier_initial.vcf fichier_modifie.vcf
Édité : Correction pour ne pas tenir compte des lignes vides qui suivent une séquence
Dernière modification par pingouinux (Le 05/01/2014, à 19:33)
Hors ligne
#3 Le 07/01/2014, à 16:32
- Ivanovich
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
jacques@ivanovich-ubuntu:~/Tmp$ cat acteurs.txt
Cabrera Paul
Cabrini Carlo
Cacao Johnny
Caccia Roger
Caccialanza Lorenzo
Caceres Hayde
Cachin Chantal
Cacho Daniel Gimenez
Cadell Johnny
Cadell Jean
Cadenat Garry
Cadeo Giuseppe
Cadet Catherine
Cabrera Paul
Cadet Rivers
Cadet François
jacques@ivanovich-ubuntu:~/Tmp$ sort -u acteurs.txt
Cabrera Paul
Cabrini Carlo
Cacao Johnny
Caccialanza Lorenzo
Caccia Roger
Caceres Hayde
Cachin Chantal
Cacho Daniel Gimenez
Cadell Jean
Cadell Johnny
Cadenat Garry
Cadeo Giuseppe
Cadet Catherine
Cadet François
Cadet Rivers
Mint 20.3 Cinnamon
Dell Optiplex 3020 - Intel(R) i5-4590 // DIMM DDR 2 x 4Go - Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller
Samsung SSD 750 EVO 120GB / Samsung SSD 960 EVO 250GB / ATA Disk WD10EARS (1,0TB)
Hors ligne
#4 Le 07/01/2014, à 16:46
- Postmortem
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
Salut,
@Ivanovich, il me semble qu'un fichier .vcf est un peu plus complexe qu'une simple liste de noms.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 28/11/2020, à 12:38
- Xzu Rukneg
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
Très intéressant!!
Merci pour le partage.
Est-ce qu'il fonctionne bien actuellement?
Hors ligne
#6 Le 28/11/2020, à 13:14
- pingouinux
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
Bonjour,
Est-ce qu'il fonctionne bien actuellement?
Le mieux est d'essayer, mais si le format des fichiers .vcf n'a pas changé depuis 2014, je ne vois pas de raison pour que le script ne fonctionne plus.
Hors ligne
#7 Le 28/11/2020, à 17:47
- Xzu Rukneg
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
Super, merci.
Hors ligne
#8 Le 28/11/2020, à 18:12
- Xzu Rukneg
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
$ ./menage_vcf.py
bash: ./menage_vcf.py : /usr/bin/python : mauvais interpréteur: Aucun fichier ou dossier de ce type
Du coup j'ai remplacé #! /usr/bin/python par #! /usr/bin/python2 et ça semble fonctionner fonctionne sous 20.04.
Est-ce mieux de mettre python3?
Ça serait parfait le script pouvait préciser genre "x doublons trouvés".
Merci encore!
Hors ligne
#9 Le 28/11/2020, à 19:33
- pingouinux
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
Ça serait parfait le script pouvait préciser genre "x doublons trouvés".
En python3 :
#!/usr/bin/env python3
import sys, re
rec=re.compile(b'(^BEGIN:VCARD.*?^END:VCARD)([\s]*)',re.M|re.S)
resul=set()
n_doublons=0
with open(sys.argv[1],'rb') as f, open(sys.argv[2],'wb') as g :
fic=f.read()
while True :
k=rec.search(fic)
if(k) :
contact=k.group(1)
g.write(fic[:k.start(1)])
if contact not in resul :
g.write(k.group(0))
resul.add(contact)
else: n_doublons+=1
fic=fic[k.end(2):]
else :
g.write(fic)
break
print("%d doublons trouvés"%n_doublons)
Hors ligne
#10 Le 05/11/2021, à 22:17
- mhep
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
Merci bcp pour le programme menage_vcf.py, il est très efficace.
$ ./menage_vcf.py bash: ./menage_vcf.py : /usr/bin/python : mauvais interpréteur: Aucun fichier ou dossier de ce type
Du coup j'ai remplacé #! /usr/bin/python par #! /usr/bin/python2 et ça semble fonctionner fonctionne sous 20.04.
Est-ce mieux de mettre python3?
Ça serait parfait le script pouvait préciser genre "x doublons trouvés".
Merci encore!
Hors ligne
#11 Le 05/11/2021, à 22:39
- Watael
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
$ sed -n '/BEGIN:VCARD/{:a; /END:VCARD/! {N;ba;};s/\n/\x0/gp;}' fichier.vcf | sort -u | sed 's/\x0/\n/g'
?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#12 Le 05/11/2021, à 23:11
- MaryPopy
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
Wow, merci pour les réponses.
J'avais oublié, je suis toujours sur Ubuntu et parfois d'autres OS mais je dois dire que j'ai un peu délaissé les forum.
Dernière modification par MaryPopy (Le 05/11/2021, à 23:11)
Photographe : http://www.vouillamozweb.ch
Hors ligne
#13 Le 25/08/2024, à 13:06
- encolpe
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
Une version optimisée pour un grand nombre de contacts :
#! /usr/bin/env python3
import re
import sys
vcard_re = re.compile("(^BEGIN:VCARD.*?^END:VCARD)([\x0d\x0a]*)", re.M | re.S)
result = set()
nb_doublons = 0
with open(sys.argv[1], "r") as input_desc, open(sys.argv[2], "w") as output_desc:
vcards = input_desc.read()
for vcard in vcard_re.finditer(vcards):
result.add(vcard.group(1))
print("number of contacts {}", len(result))
output_desc.write('\n'.join(result))
exit(0)
Le set python3 s'occupe déjà de tester l'unicité, pas besoin d'aller chercher plus loin.
$ ./menage_vcf.py contacts_bug_samsung.vcf new_contacts.vcf
number of contacts before 87917
number of contacts after 633
Hors ligne
#14 Le 25/08/2024, à 13:25
- encolpe
Re : Effacer les doublons d'un fichier .vcf (liste de contact)
$ ./menage_vcf.py bash: ./menage_vcf.py : /usr/bin/python : mauvais interpréteur: Aucun fichier ou dossier de ce type
Du coup j'ai remplacé #! /usr/bin/python par #! /usr/bin/python2 et ça semble fonctionner fonctionne sous 20.04.
Est-ce mieux de mettre python3?Ça serait parfait le script pouvait préciser genre "x doublons trouvés".
Merci encore!
Le mieux est de mettre python3 :
#! /usr/bin/env python3
Hors ligne