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.
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