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

  1. #1
    Membre régulier
    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
    Points : 75
    Points
    75
    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 éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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
    Points : 8 442
    Points
    8 442
    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.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  3. #3
    Membre régulier
    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
    Points : 75
    Points
    75
    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 éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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
    Points : 8 442
    Points
    8 442
    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?
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  5. #5
    Membre régulier
    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
    Points : 75
    Points
    75
    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 éprouvé
    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
    Points : 926
    Points
    926
    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

  7. #7
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    Alors j'ai essayé le code de clodion (et merci pour vos 2 réponses)

    J'ai bien en résultat la même chose que toi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ('liste result:\t', ['toto zaza:tutuklulu@totot.fr'])
    (0, '\t', 'toto zaza:tutuklulu@totot.fr')
    Maintenant mon but est de prendre que le 3eme champs, il faut donc que je split sur le : qui est identique partout avant le mail pour ne garder que celui ci ?

    Et après comment le prendre en comparaison du genre champ 2 = mail mais si il n'est pas présent dans le fichier, l'ajouter avec le champ 1 (nom prénom ou nom etc...) tout en le reformatant bien à savoir qu'on a parfois des nom ou des prénom.nom etc...car il faut que le script sache "eviter" les erreurs d'interpretation et ca...j'ai beaucoup de mal dessus.

    Quelque chose du genre, mais qui evite les erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     for X in result
        if champ2_file 2 = champ2_file1
            then print champ 1, champ2

  8. #8
    Membre éprouvé
    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
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par aerane Voir le message
    Alors j'ai essayé le code de clodion (et merci pour vos 2 réponses)

    J'ai bien en résultat la même chose que toi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ('liste result:\t', ['toto zaza:tutuklulu@totot.fr'])
    (0, '\t', 'toto zaza:tutuklulu@totot.fr')
    Maintenant mon but est de prendre que le 3eme champs, il faut donc que je split sur le : qui est identique partout avant le mail pour ne garder que celui ci ?

    Et après comment le prendre en comparaison du genre champ 2 = mail mais si il n'est pas présent dans le fichier, l'ajouter avec le champ 1 (nom prénom ou nom etc...) tout en le reformatant bien à savoir qu'on a parfois des nom ou des prénom.nom etc...car il faut que le script sache "eviter" les erreurs d'interpretation et ca...j'ai beaucoup de mal dessus.

    Quelque chose du genre, mais qui evite les erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     for X in result
        if champ2_file 2 = champ2_file1
            then print champ 1, champ2
    Bonjour,
    Enfin bon, je n'ai fait que reprendre le script qui était annoncé avec la modification de deusyss!
    Sinon, je ne comprend pas le nouveau problème: Quel est ce troisième champ?
    -> à la ligne 11 on a la liste des éléments du fichier 2 qui ne se trouvent pas dans le fichier 1
    -> à la ligne 15 on parcours chacun des éléments (ici du type 'cassetete maillet:@maillet@coudboule.fr')

    Après, pour extraire l'adresse mail de ces éléments (ligne 15), le plus simple me semble une expression régulière. C'est le module re (beaucoup plus simple qu'il n'y paraît). Il doit être identique entre les versions 2 et 3 de Python.
    En cherchant la fin à partir de la fin de l'élément le premier "@", et une chaîne de texte, chiffres, ".", "_" précédent le dernier "@".

    Clodion

    PS: comme je suis sous Python 3, "print" est désormais une véritable fonction: on écrit 'print("coucou")' tandis qu'en version Python 2, l'expression équivalente était 'print "coucou"')
    PS2: je ne peux pas trop regarder car j'ai des problèmes de connexion… Donc bon…

  9. #9
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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
    Points : 8 442
    Points
    8 442
    Par défaut
    Clodion, pour information l'ecriture du print, branche 3 fonctionne aussi en branche 2.

    Sinon, je relance ce post. Le probleme est-il toujours present ou non?

    Si c'est le cas, merci de repondre aux questions de Clodion, sinon, merci de donner la solution et de passer le post à .
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  10. #10
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    Bonjour, et je m'excuse pour la longue réponse.

    Le script ayant été "mit de côté" car nous avons eu la maintenance à préparer/faire et une fermeture de site.

    Je récapitule le soucis, après avoir faire la différence, il faut ciblé le mail car c'est le champ qui ne change pas de formulation, afin de comparé si il existe. Une fois vérifier si il n'existe pas, l'ecrire dans le fichier d'origine adressbook.

    Si je reprend les questions:

    - Quel est ce troisième champ?

    Il s'agirai du mail, mais le soucis du fichier source est qu'il est parfois en champ 2 ou 3:
    nom(champ1),prenom(champ2): mail(champ3)
    L'avantage du mail est que je pourrai couper à partir du ":" ou chercher autour du "@"
    #
    - à la ligne 11 on a la liste des éléments du fichier 2 qui ne se trouvent pas dans le fichier 1
    - à la ligne 15 on parcours chacun des éléments (ici du type 'cassetete maillet:@maillet@coudboule.fr')

    Je suis d'accord, maintenant que j'ai le comparatif enfaite, je souhaite focaliser la recherche sur un élément qui lui ne varie pas (le mail), la construction du champs précédent les ":" ,elle, est variable, comme j'ai précisé au début.
    #

    - Après, pour extraire l'adresse mail de ces éléments (ligne 15), le plus simple me semble une expression régulière. C'est le module re (beaucoup plus simple qu'il n'y paraît). Il doit être identique entre les versions 2 et 3 de Python.
    En cherchant la fin à partir de la fin de l'élément le premier "@", et une chaîne de texte, chiffres, ".", "_" précédent le dernier "@".

    Si je comprends bien (et j'ai un peu de galère avec le module re) il faudrait mettre en paramettre quelque chose du genre: obj_regex = re.search(motif, texte) mais pour chercher entre le ":" jusqu'au dernier "." et une fois trouver par exemple faire un print "champs 1 2 3" afin de l'écrire dans le fichier source d'adressebook ?

  11. #11
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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
    Points : 8 442
    Points
    8 442
    Par défaut
    Salut,

    C'est tout à fait ça, il va falloir utiliser le module re. Il te permettra d'isoler la section qui t'interesse, en te detachant totalement du reste de la string. Pour former ta regex, un petit LIEN.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  12. #12
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    Alors si je me refaire au liens ça donnerai quelques choses du genre:

    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
     
    import re
     
    begin_balise = ':'
    end_balise = '@'
    motif = begin_balise + '*' + end_balise
     
    obj_fichier = open("fichier1","r")
    texte = obj_fichier.read()
    obj_fichier.close()
    obj_regex = re.search(motif, texte)
     
    if obj_regex is None:
        print "Pas de mail reconnaissable dans le fichier."
    else:
        texte = obj_regex.group()
        texte = texte.replace(begin_balise, '')
        texte = texte.replace(end_balise, '')
        texte = texte.strip()
        print "Voici les mails non présents :",texte
        addressbook = open('/root/addressbook', "w")
        addressbook.write(texte)
        addressbook.close()
    Après pour afficher un mail non trouvé ca passe, mais la je ne voie pas comment afficher la ligne complète et non juste le mail.

  13. #13
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    Alors après une bonne reprise du script avec le module RE j'en suis au point ou il tourne avec un is None au lieu de is Not None mais ne me sort pas le résultat attendu, sachant que j'ai un index out of range en erreur sans trouver la solution...

    La version actuel avec Not me sort un message d'erreur

    Traceback (most recent call last):
    File "./Bureau/adressbook.py", line 30, in <module>
    if re.search(mail_rech,lines ) is not None:
    File "/usr/lib64/python2.6/re.py", line 142, in search
    return _compile(pattern, flags).search(string)
    TypeError: expected string or buffer


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #!/usr/bin/python2.6
    # -*- coding: utf-8 -*-
     
    #import subprocess,
    from subprocess import *
    import re,os,sys,difflib
     
    #r"^[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*(\.[a-zA-Z]{2,6})$"
     
    file1 = open('/Bureau/adressbook' ,'r')
    lines = [line.strip('\n') for line in file1.readlines()]
    #print lines
    file2 = open ('/Bureau/adressbook2','r')
    lines2 = [line2.strip('\n') for line2 in file2.readlines()]
     
    #begin_balise = ':'
    #end_balise = '@'
    #motif = begin_balise + '*' + end_balise
     
    #expressionmail=r"^[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*(\.[a-zA-Z]{2,6})$"
    for element in lines:
        fields= element.split( ":" )
        mail = fields[1]
        for element2 in lines2:
            fields2= element2.split( ":" )
            mail2 = fields2[1]
    	#print mail2
    	login = mail2.rsplit("@")
    	mail_rech = login[0]
           	if re.search(mail_rech,lines ) is not None:
    	    print element2+" n'est pas présent"
    	    addressbook = open('/Bureau/adressbook3', "w")
    	    addressbook.write(element2)
    	    addressbook.close()
    	else:
    	    continue
    Le module re reste une nouvelle chose a utilisé pour moi et j'avoue que je galère sur le sujet

  14. #14
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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
    Points : 8 442
    Points
    8 442
    Par défaut
    Ne t'inquiete pas. Meme ceux qui connaissent bien Python on commencé par l'apprendre .

    Et si on est sur ce forum c'est pour aider, donc ne pas avoir peur de poser des questions ou de buter sur certains points.

    Alors concernant ton code:
    >la pep8 indique "un seul import par ligne" => ce sera mieux de respecter les consignes de la PEP8. Je t'invite à la lire.
    >En anglais address prend 2 "d" => bon là, excepté un anglais personne ne te le reprochera
    >En python, le predicat d'un if est considéré comme faux s'il vaut None, 0 ou False. Dans tous les autres cas, il est considéré comme vrai, tu peut donc simplifié par "if re.search(x,y):", eventuellement "if not re.search(x,y):" si tu veux le resultat inverse.

    Sinon concernant ton erreur, si tu lis le message d'erreur, tu lis "TypeError: expected string or buffer" et tu sais que cela s'est produti ligne 30 dans ton code. Maintenant en relisant la definition de re.search, tu decouvriras que le second parametre est un string. Donc un petit "str(lines)" a la place de "lines", ligne 30 resoud ton probleme.


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #!/usr/bin/python2.6
    # -*- coding: utf-8 -*-
     
    #import subprocess,
    from subprocess import *
    import re
    import os
    import sys
    import difflib
     
    #r"^[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*(\.[a-zA-Z]{2,6})$"
     
    file1 = open('./addressbook.txt' ,'r')
    lines = [line.strip('\n') for line in file1.readlines()]
    #print lines
    file2 = open ('./addressbook.txt','r')
    lines2 = [line2.strip('\n') for line2 in file2.readlines()]
     
    #begin_balise = ':'
    #end_balise = '@'
    #motif = begin_balise + '*' + end_balise
     
    #expressionmail=r"^[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*(\.[a-zA-Z]{2,6})$"
    for element in lines:
        fields= element.split( ":" )
        mail = fields[1]
        for element2 in lines2:
            fields2= element2.split( ":" )
            mail2 = fields2[1]
    	#print mail2
    	login = mail2.rsplit("@")
    	mail_rech = login[0]
           	if re.search(mail_rech,str(lines)):
    	    print element2+" n'est pas présent"
    	    addressbook = open('./addressbook3.txt', "w")
    	    addressbook.write(element2)
    	    addressbook.close()
    	else:
    	    continue
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  15. #15
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    Bonjour et merci,

    Après 2 -3 adaptations il me fait exactement ce que je cherche (désolé du temps de réponse)

  16. #16
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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
    Points : 8 442
    Points
    8 442
    Par défaut
    Mieux vaut tard que jamais

    N'oublie pas de passer le post à

    Bonne continuation
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

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