Python: E-mail címek

Van egy e-mail címeket tartalmazó fájlom. Addig eljutottam, hogy tömbbe rendeztem őket. Rengeteg hibás e-mail cím van a listában. Hogyan tudom ezeket javítani? A szóközöket már kitudtam venni a címekből, ami kellene még:

  1. Nagybetűket kisbetűkre alakítani.
  2. Ékezetes karaktereket átalakítani (angol ABC).
  3. Speciális karaktereket törölni.

... vagy nem kell átkonvertálni csak egyszerűen ismerje fel, hogy valós vagy sem az e-mail cím.

Kezdő programozó vagyok. A segítséget előre is köszönöm.

Hozzászólások

... vagy nem kell átkonvertálni csak egyszerűen ismerje fel, hogy valós vagy sem az e-mail cím.
Én ezek elolvasásával állnék neki a feladatnak:
http://www.regular-expressions.info/email.html
http://www.regular-expressions.info/regexbuddy/email.html
http://docs.python.org/library/re.html

Egyéb infó a fenti 3 ponthoz:
1.)
http://docs.python.org/library/stdtypes.html#string-methods (Ctrl +F str.lower)
http://docs.python.org/library/string.html

2.)
(ezt más toolokkal sokkal egyszerűbben meg lehet oldani szerintem, pl.:http://packages.ubunut.com/oneiric/unaccent)
Nem igaz, lásd a lent említett: http://pypi.python.org/pypi/Unidecode
http://effbot.org/zone/unicode-convert.htm
https://bitbucket.org/timv/python-extras/src/c8f4f50b23bb/text/latin_to…
Nem igaz, lásd a lent: http://pypi.python.org/pypi/Unidecode
(Ez valóban sokkal jobbnak tűnik.)

3.)
http://docs.python.org/library/stdtypes.html#string-methods (Ctrl +F str.replace)
http://docs.python.org/library/re.html

Fogsz majd még szívni ezzel azzal.
Ha mindenképpen át akarod alakítani, akkor azzal kezdeném,
hogy először valami ASCII félét csinálnék belőle (unaccent), aztán jöhet a többi.
Ez is hülyeség, szintén lásd lent.

(Mindezeket úgy írom, hogy a Python tudásom nincs messze a 0-tól :))

Szerk.

1. fentebb túlragozva, lower()-t neki!
2. nézz utána: unicodedata (egészen pontosan unicodedata.normalize kell majd neked)
3. ??? ez logikai kérdés... Ha bátor vagy, próbáld ki ezt:
http://pastebin.com/thaF0S0A

Ha szerencséd van, kis pofozással menni fog.

Hozzavalok:
- Telepitsd fel az Unidecode modult:


sudo pip install Unidecode

Utana ezzel a scripttel tudsz kiserletezni:


#!/usr/bin/env python

from unidecode import unidecode
import sys, os
import re

EMAIL_PATTERN = re.compile(r'\A[0-9A-Za-z][0-9A-Za-z\.\+=-]+@([a-z0-9]([-a-z0-9]*[-a-z0-9])?\.)+[a-z]{2,6}\Z')

if len(sys.argv) < 2:
    print "Usage: %s TRANSLIT_STRING" % sys.argv[0]
    exit(1)


src = unicode(sys.argv[1], "UTF-8")

ret = src

if not EMAIL_PATTERN.match(src):
    # ASCII version
    asrc =  unidecode(src).lower()
    ret = re.sub(r'[^\w]+', '', asrc)

print "Transcoded version is: ", ret

Az Unidecode gyakorlatilag elvegzi neked a transliteration muveletet, ami a gyakorlatban a nem-ascii karakterek megfelelelo ASCII atirasat jelenti.

Biztos meg lehet core pythonnal is csinalni, mentsegemre szoljon, hogy ilyen 15 percet aldoztam az idombol erre, es nem is vagyok pythonos emberke... :-)

A fenti script nem a problema megoldasa, mert nem tudom, milyen formatumu az adatbazis, meg honnan jon. Ha tudsz egy kicsit a kigyok nyelven - en csak dadogva sziszegek - akkor a fenti scripttel mar el tudsz indulni. Ha nem, ird meg, milyen formatumu az adatbazisod, es megnezem, mit tudok vele kezdeni.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Köszönöm a hozzászólásokat. Ezekből és ebből már összetudom rakni. Még egy kérdés: A replace függvénynek nem lehet több értéket adni? Hasonlóra gondolok mint itt, csak ugye nem PHP hanem Python.

> ... vagy nem kell átkonvertálni csak egyszerűen ismerje fel, hogy valós vagy sem az e-mail cím.

Én inkább ezt mondanám. Kb. mint: a papíron nem ismerhető fel az adóazonosító, tippeljek vagy ne fogadjam el?

Aki nem tudja helyesen leírni az email címét, attól nem várható el, hogy csak az ékezetekben tévedett.

szaszi

... másrészt aki elkezd érvénytelen* címekből akármilyen heurisztikával érvényeseket faragni, jó eséllyel fog olyan érvényes címet kalapálni, amely tulajdonosa az érintettek halmazán kívül esik - azaz ebből szpem lesz. Persze ha éppen a szpem a cél, akkor (önmoderálva) nem szóltam.

* Tkp. miért kell masszírozni azokat a szegény nagybetűket a címekben? Annál NAGYOBB HibájA sOsE leGyeN egY cíMlisTÁnaK!