Python>>> Email extractor

Fermé
sebsauvage - 3 avril 2002 à 11:35
 wiili - 3 mai 2008 à 16:47
Comment extraire les adresses email de n'importe quel fichier ?

Avec 2 lignes de code en Python !

import sys,re
print '\n'.join(re.findall('([\w\.\-]+@[\w\.\-]+)',sys.stdin.read()))


Détaillons un peu ça:

sys.stdin, c'est l'entrée standard (le clavier en général, mais ça peut aussi être un fichier lu avec monprogramme.exe < monfichier.txt).

sys.stdin.read() est une chaîne qui contient tout ce qu'il y a sur l'entrée standard.

On utilise le module d'expressions régulière (re) pour trouver toutes les chaînes (findall) qui ressemblent à une adresse email ([\w\.\-]+@[\w\.\-]+).

\w c'est les caractères a-z, A-Z, 0-9 et _
\. c'est le point (.)
\- c'est le tiret (-).
[\w\.\-]+ veut dire : "n'importe quelle combinaison d'un ou plusieurs caractères a-z, A-Z, 0-9, _, - ou ."

Une adresse email est toujours de la forme toto@titi.com :
on répète donc après l'arobase (@):
[\w\.\-]+@[\w\.\-]+


re.findall('([\w\.\-]+@[\w\.\-]+)', chaine ))
va donc renvoyer une liste de toutes les adresses email contenues dans la chaîne. Exemple:
>>> import re
>>> print re.findall('([\w\.\-]+@[\w\.\-]+)','coucou a@boo.com kiki c@dodo.net gloug')
['a@boo.com', 'c@dodo.net']


On va coller ensemble tous les éléments de cette liste pour en faire une seule chaîne de caractères, en séparant chacun des éléments par un retour à la ligne (\n). Exemple:
>>> b = ['bozo','le','clown']
>>> print '\n'.join(b)
bozo
le
clown
>>> print ' * '.join(b)
bozo * le * clown


Et on affiche le résultat:
print '\n'.join(re.findall('([\w\.\-]+@[\w\.\-]+)',sys.stdin.read()))


Sauvegardez les 2 lignes de Python dans un fichier texte (par exemple email_extractor.py) et donnez-lui à manger *n'importe* quel fichier (par exemple un fichier HTML pris au hasard sur le web, ou un fichier EXE, ou une DLL):

python email_extractor.py < monfichier.html


On pourrait encore affiner l'expression régulière (par exemple pour forcer la présence d'un point dans le nom de domaine)
Mais dans la majorité des cas, ça suffit.
A voir également:

1 réponse

merci pour les detail mais mon probleme est que je ne sait pas utiliser le logiciel pour extraire les mails . a chaque foi que j'essais j'ai comme resultat rien. car je veut envoyer un mail a 500 personnes que je ne connait pas vraiment merci d'avantage
2