Partage
  • Partager sur Facebook
  • Partager sur Twitter

isoler des parties de string

Sujet résolu
    28 décembre 2015 à 12:06:59

    Bonjour,

    après avoir récupérer le contenu d'un fichier text  dans une variable,

    je voudrais ne récupérer que les parties de text qui se trouvent entre les caractères < et > et remplacer ces caractères par des ;

    en fait il s'agit d'un fichier d'adresses mail polué par du texte inutile.

    Merci de votre aide

    -
    Edité par patrockanite 28 décembre 2015 à 12:08:32

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 décembre 2015 à 13:02:21

      Les expressions régulières peuvent t'aider à faire ce genre de travail. Elles sont même idéales pour cela. Je te laisse le soin de chercher un cours ou une documentation si elles t’intéressent, sinon voici comment faire cela en pure Python, avec les méthodes des chaînes str.index() et str.split() :

      with open('fichier.txt') as file
          text = file.read()
      mails = [ s[:s.index('>')]  for s in text.split('<') ]
      

      -
      Edité par Anonyme 28 décembre 2015 à 13:03:35

      • Partager sur Facebook
      • Partager sur Twitter
        28 décembre 2015 à 14:24:16

        Merci, j'avais également pensé aux regex mais je ne savais pas trop comment faire

        Je vais essayer 

        • Partager sur Facebook
        • Partager sur Twitter
          29 décembre 2015 à 8:39:26

          Bonjour,

          pour être plus précis voici un exemple de fichier à trier :

          <direction@toto.fr>A8 Lander - A8 Land <epaulard@lander.fr>; 
          les cochons dans l'espace - chez Peggy <Peggy@univers.fr>;

          voici le code que j'ai essayé suite à la réponse que m'a faite celthon :

          with open('fichier.txt') as file:
              texte = file.read()
          mails = [texte[:texte.index('>')]  for text in texte.split('<')]
          
          print(mails)
          

          et dessous le retour

           ['<direction@toto.fr', '<direction@toto.fr', '<direction@toto.fr', '<direction@toto.fr']

          en fait le retour attendu serait plutôt :

          ['direction@toto.fr','epaulard@lander.fr','Peggy@univers.fr']

          ou mieux encore :

          direction@toto.fr;epaulard@lander.fr;Peggy@univers.fr

          merci de vos éclaircissement

          • Partager sur Facebook
          • Partager sur Twitter
            29 décembre 2015 à 10:30:02

            Salut,

            Utilise un lookbehind (?<=<) et retiens tous les caractères jusqu'au ">". La méthode findall permet d'obtenir tous les emails.

            $  cat adresses
            <direction@toto.fr>A8 Lander - A8 Land <epaulard@lander.fr>;
            les cochons dans l'espace - chez Peggy <Peggy@univers.fr>;
            $  cat match_adresses.py
            import re
            adresses = re.compile(r"(?<=<)[^>]*")
            with open("adresses", "r") as f:
                items = ";".join(adresses.findall(f.read()))
                print(items)
            $  python3 match_adresses.py 
            direction@toto.fr;epaulard@lander.fr;Peggy@univers.fr
            $ 
            



            -
            Edité par azertymen 29 décembre 2015 à 10:31:57

            • Partager sur Facebook
            • Partager sur Twitter
              29 décembre 2015 à 13:12:13

              Merci beaucoup azertymen,

              ça marche nickel.

              Il me reste à bien comprendre comment tu t'y es pris.

              trop génial l'informatique !

              • Partager sur Facebook
              • Partager sur Twitter

              isoler des parties de string

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown