Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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)

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!! cool
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,

Xzu Rukneg #5 a écrit :

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)

Xzu Rukneg #8 a écrit :

Ç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.

Xzu Rukneg a écrit :
$ ./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)

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)

Xzu Rukneg a écrit :
$ ./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