IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Comparaison entre list et addressbook


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Par défaut Comparaison entre list et addressbook
    Hello,

    Pour l'environnement:
    Je reste un bon débutant en python et malheureusement au travail nous tournons sous la 2.6, nous n'avons pas moulte module d'installer et aucune possibilitée d'en installer de nouveau.

    Je suis actuellement entrain de travailler sur une comparaison automatique d'addressbook en mode très basique pour une version python 2.6

    Mon problème reste sur ma boucle de vérification, via les set il me sortait bien au début toute la liste des mails non trouvé dans l'address book principal, le 2eme correspond à un fichier que le service remplira et lancement le script. J'ai commencé à vouloir ajouter automatiquement le nouvel utilisateur dans l'addressbook principal.

    Mon soucis est: le script boucle toujours sur le même user alors qu'il a été ajouter à l'adressbook, je voudrai voir à comparer juste le mail car nous avons plusieurs formats dont certains exemples ci dessous:

    nom.prenom:mail@domaine.fr
    prenom.nom:mail@domaine.fr
    nom prenom:mail@domaine.fr
    prenom\nom:mail@domaine.fr
    nom:mail@domaine.fr...

    Le mail reste la seule comparaison fiable pour le script.

    Mon code pas très très beau actuel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #import subprocess,
    from subprocess import *
    import re,os,sys
     
    file1 = open(''/home/user/aeranei/Bureau/adressbook' ,'r')
    lines = [line.strip('\n') for line in file1.readlines()]
    file2 = open ('/home/user/aeranei/Bureau/adressbook2','r')
    lines2 = [line2.strip('\n') for line2 in file2.readlines()]
     
    s1 = set(lines)
    s2 = set(lines2)
    s3 = set(s2)-set(s1)
    #utilisation de la liste dans la boucle
    result=list(s3)[0]
     
    for user in result:
        #retour=result.replace('\\',' ')
        print user
    #ajout=open( ''/home/user/aeranei/Bureau/adressbook', 'a')
    #ajout_file=retour+('\n')
    #ajout.write (ajout_file)
    #file2.close()
    #ajout.close()
    #file1.close()

  2. #2
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Bonjour,

    Effectivement pour le code un petit coup d'oeil côté PEP8 & PEP20 serait pas mal .

    bref sinon, concernant le code, lignes 10,11,12, il y a des set() en trop. Aussi simple de faire "s3 = set(lines) - set(lines2)", normalement même résultat (à vérifier tout de même)

    Enfin, dans result, tu stocks list(s3)[0], autrement dit, juste le premier element de ta liste, donc normal que ta boucle for tourne toujours sur le même élément. Enleve le "[0]" et cela devrait déjà etre un peu mieux.

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Par défaut
    Pour les set en trop c'est corrigé ! je me suis basé sur des méthodes que je trouve...

    Je stockais list(s3) avec un [0] pour "retirer" les crochets + quote et rendre la liste utilisable dans la boucle. Sinon j'ai des retours d'erreurs de liste inutilisable etc...

    Parcontre je viens de retirer le [0] et c'est la même chose, je n'ai qu'une différence qui tourne. Parcontre en passant la liste dans une boucle je n'ai plus les quotes ni crochet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    s3 = set(lines2) - set(lines)
    result=list(s3)
    print list(s3)
    for user in result:
        #retour=result.replace('\\',' ')
        print user
    retour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Bureau]$ ./verif_mail.py
    ['toto zaza:tutuklulu@totot.fr']
    toto zaza:tutuklulu@totot.fr

  4. #4
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Je n'ai pas ce qu'il faut sous la min pour tester. Pas avant ce soir.

    Serais-t-il possible un exemple du contenu des deux fichiers? (bidon bien sur), afin de faire des tests de mon côté. C'est pour etre sur de reproduire le meme genre d'info avec la meme structure

    EDIT: tu dis qu'il n'y a qu'un seul retour, mais la liste result que contient elle?

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Par défaut
    La liste result contient normalement les mails qui sont présent dans l'adressbook2 mais qui ne sont pas présent dans l'adressbook1 afin de les rajoutés.

    Les 2 fichiers sont spécifiés comme cela,
    j'ai ajouté une différence du mail zzz.zzz:dd@dd.fr dans le fichier 2 en plus des "nouveaux" pour bien montrer le travail que le script doit faire, comparer le mail uniquement et ne pas remplir si ca correspond:

    fichier1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    toto zaza:tutuklulu@totot.fr
    zzz.zzz:dd@dd.fr
    Pusfdfka:mari.pusfa@bibi.fi
    toto zaza:tutuklulu@totot.fr
    trtrtr zzz:dtrtrtrtrtr@dd.fr
    fichier2 (mail à vérifier si présent et ajouter au besoin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    toto zaza:tutuklulu@totot.fr
    zzz zzz:dd@dd.fr
    abcdef\zaerty:azert@qwert.com
    cassetete maillet:@maillet@coudboule.fr

  6. #6
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par aerane Voir le message
    La liste result contient normalement les mails qui sont présent dans l'adressbook2 mais qui ne sont pas présent dans l'adressbook1 afin de les rajoutés.

    Les 2 fichiers sont spécifiés comme cela,
    j'ai ajouté une différence du mail zzz.zzz:dd@dd.fr dans le fichier 2 en plus des "nouveaux" pour bien montrer le travail que le script doit faire, comparer le mail uniquement et ne pas remplir si ca correspond:

    fichier1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    toto zaza:tutuklulu@totot.fr
    zzz.zzz:dd@dd.fr
    Pusfdfka:mari.pusfa@bibi.fi
    toto zaza:tutuklulu@totot.fr
    trtrtr zzz:dtrtrtrtrtr@dd.fr
    fichier2 (mail à vérifier si présent et ajouter au besoin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    toto zaza:tutuklulu@totot.fr
    zzz zzz:dd@dd.fr
    abcdef\zaerty:azert@qwert.com
    cassetete maillet:@maillet@coudboule.fr
    Bonjour,
    Je suis en Python3, mais cela ne devrait pas faire grande différence.
    Avec les deux exemples de fichiers énoncés, le résultat semble plutôt probant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    from subprocess import *
    import re,os,sys
     
    file1 = open('fichier1' ,'r')
    lines = [line.strip('\n') for line in file1.readlines()]
    file2 = open ('fichier2','r')
    lines2 = [line2.strip('\n') for line2 in file2.readlines()]
     
    s3 = set(lines2)-set(lines)
    #utilisation de la liste dans la boucle
    result=list(s3)
     
    print("liste result:\t", result)
     
    for ind, user in enumerate(result):
        #retour=result.replace('\\',' ')
        print(ind, "\t", user)
    #ajout=open( 'file1', 'a')
    #ajout_file=retour+('\n')
    #ajout.write (ajout_file)
    #file2.close()
    #ajout.close()
    #file1.close()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> 
    liste result:	 ['abcdef\\zaerty:azert@qwert.com', 'cassetete maillet:@maillet@coudboule.fr', 'zzz zzz:dd@dd.fr']
    0 	 abcdef\zaerty:azert@qwert.com
    1 	 cassetete maillet:@maillet@coudboule.fr
    2 	 zzz zzz:dd@dd.fr
    >>>
    Non?

    Clodion

    PS: sinon, attention aux fichiers qui ne sont pas fermés

Discussions similaires

  1. comparaison entre zone de liste déroulante et titre de colonne
    Par myayo001 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 27/02/2014, 15h32
  2. Comparaison entre 2 listes
    Par fezzani dans le forum Composants
    Réponses: 3
    Dernier message: 31/05/2012, 10h21
  3. Comparaison entre listes et résultat dans ListBox
    Par justin74 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/05/2012, 11h58
  4. [XL-2007] Comparaison entre un champs et une liste
    Par jerem1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/07/2011, 08h46
  5. Réponses: 6
    Dernier message: 21/01/2004, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo