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 :

Extraire les composants d'un contenu textuel [Python 3.X]


Sujet :

Python

  1. #1
    Débutant
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Points : 97
    Points
    97
    Par défaut Extraire les composants d'un contenu textuel
    Bonjour à vous,

    Mon objectif est d'extraire les différents composants d'un email. Comme entré j'ai des contenus textuels qui correspondent à des emails et je veux identifier la personne qui a envoyé l'email, la personne qui l'a réçu, objet, corps et signature du mail.

    Pour cela, j'ai fait ce petit code. Toute autre idée est le bienvenue.

    Mon problème actuel est dans la définition de l'instance de classe que je comprends pas pourquoi ça bugue.

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    import email
     
    class Email_Components:
     
        def Extract_From(raw_content):
            sender = email.message_from_string(raw_content)['from']
            receiver = email.message_from_string(raw_content)['to']
            b = email.message_from_string(raw_content)
            body = ""
            if b.is_multipart():
                for part in b.walk():
                    ctype = part.get_content_type()
                    cdispo = str(part.get('Content-Disposition'))
                    # skip any text/plain (txt) attachments
                    if ctype == 'text/plain' and 'attachment' not in cdispo:
                        body = part.get_payload(decode=True)  # decode
                        break
            # not multipart - i.e. plain text, no attachments, keeping fingers crossed
            else:
                body = b.get_payload(decode=True)
            yield sender, receiver, body
     
        def __init__(self, raw_content):
            for sender, receiver, body in self.Extract_From(raw_content):
                self.sender= sender
                self.receiver= receiver
                self.body= body
     
       if __name__ == '__main__':
            a = """From root@a1.local.tld Thu Jul 25 19:28:59 2013
                        Received: from a1.local.tld (localhost [127.0.0.1])
                            by a1.local.tld (8.14.4/8.14.4) with ESMTP id r6Q2SxeQ003866
                            for <ooo@a1.local.tld>; Thu, 25 Jul 2013 19:28:59 -0700
                            Received: (from root@localhost)
                            by a1.local.tld (8.14.4/8.14.4/Submit) id r6Q2Sxbh003865;
                            Thu, 25 Jul 2013 19:28:59 -0700
                            From: root@a1.local.tld
                            Subject: oooooooooooooooo
                            To: ooo@a1.local.tld
                                Cc: 
                                X-Originating-IP: 192.168.15.127
                                X-Mailer: Webmin 1.420
                                    Message-Id: <1374805739.3861@a1>
                                    Date: Thu, 25 Jul 2013 19:28:59 -0700 (PDT)
                                    MIME-Version: 1.0
                                    Content-Type: multipart/mixed; boundary="bound1374805739"
     
                                    This is a multi-part message in MIME format.
     
                                    --bound1374805739
                                    Content-Type: text/plain
                                Content-Transfer-Encoding: 7bit
     
                                ooooooooooooooooooooooooooooooooooooooooooooooo
                                ooooooooooooooooooooooooooooooooooooooooooooooo
                                ooooooooooooooooooooooooooooooooooooooooooooooo
     
                                --bound1374805739--"""
            b=""""""
            email_compo = Email_Components(b)
    Voilà l'erreur que j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NameError: name 'Email_Components' is not defined
    Merci Beaucoup d'avance

  2. #2
    Membre averti Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 155
    Points : 346
    Points
    346
    Par défaut
    Salut, tu as problème d'indentation à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if __name__ == '__main__':
    et cette ligne ne dois pas être dans le même bloc d'instruction que ta classe

  3. #3
    Débutant
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Points : 97
    Points
    97
    Par défaut
    Je vous remercie pour votre réponse rpaide. Cependant, c'est bien écrit dans mon éditeur et pourtant ça marche pas.. J'ai pris même votre code mais toujours en vain. J'ai même essayé de faire un print pour tester si c'est un problème d'indentation et ça marche le print et du coup ça ne peut pas être ce problème.
    Merci beaucoup encore une fois pour votre réponse

  4. #4
    Membre averti Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 155
    Points : 346
    Points
    346
    Par défaut
    vous avez essayer de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if __name__ == '__main__':
    dans la definition de la classe alors qu'il devrait etre comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Foo:
        pass
     
    if __name__ == "__main__":
        pass

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Octobre 2015
    Messages : 53
    Points : 85
    Points
    85
    Par défaut
    Salut salut !

    Ca fait un bon moment que j'ai pas fait de python mais au vu de ton indentation j'ai l'impression que ton instanciation est dans la declaration de ta classe.
    Du coup elle n'est effectivement pas encore definie non ?


    Edit : zancrows est beaucoup trop rapide ^^


    Edit2 : J'ai testé le code avec la modification de zancrows. Il n'y a plus l'erreur, mais il y en a une autre " Extract_From() takes 1 positional argument but 2 were given".
    Il me semble que l'or de la defnition de Extract_From() il faut ajouter self avant raw_content ou bien passer la methode en static

  6. #6
    Membre averti Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 155
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par nibors Voir le message
    Il me semble que l'or de la defnition de Extract_From() il faut ajouter self avant raw_content ou bien passer la methode en static
    oui c'est ca il manque le mot clé self à la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def Extract_From(raw_content):

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/04/2016, 17h48
  2. [WD-2010] Comment extraire les objets OLE contenu dans un paragraphe Word
    Par Philou67430 dans le forum VBA Word
    Réponses: 1
    Dernier message: 23/07/2015, 10h14
  3. [RegEx] Extraires les liens d'un contenu HTML
    Par Dimitri69 dans le forum Langage
    Réponses: 4
    Dernier message: 01/11/2012, 11h32
  4. Réponses: 2
    Dernier message: 21/06/2011, 12h06
  5. Extraire les images contenues dans un fichier word
    Par elreybubu dans le forum Delphi
    Réponses: 2
    Dernier message: 25/10/2006, 13h07

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