[python] Parsování emailu
Jakub Vojácek
jakohv na seznam.cz
Úterý Duben 29 18:38:09 CEST 2008
Ahoj
Opet se na vás obracím s nekterými mými problémy. Tentokrát se jedná o takovou spíse teoretickou otázku. Jiz mám naprogramovaného "relativne" fungujícího postovního klienta (prijímání, psaní mailu, pravidla pro zprávy, skupiny, kontakty, rss ctecka apod...). Pokud pracuji s databází, která obsahuje 100 e-mailu, zádný problém nenastane, ale jelikoz e-maily nemazu, tak je pocet e-mailu o neco vyssí (pres 4000). A v tom je práve ten problém. Pokud mám napríklad slozku, ve které je 500 e-mailu, tak se nacítá asi 5 sekund. V jiných aplikacích (Outlook Express je tato doba 10 kratsí). A moje otázka je: Jak by se tato doba dala zkrátit?
Jako knihovnu pro tvorbu Gui pouzívám WxPython a jako databázi, kam ukládám e-maily pouzívám modul shelve. E-maily ukládám následovne:
def prijmi_email(self):
email = pop.retr(x)
email = "\n".join(email[1])
kategorie = 0
precteno = 0
self.uloz_db(kategorie, [email, precteno])
def uloz_db(self, kategorie, email):
s=shelve.open("Db/%s.db"%kategorie)
id=s["id"]
s[str(id)] = email
s["id"] = id +1
s.close()
return id
Kazdý e-mail (v rámci jedné slozky) má tedy svoje vlastní unikátní id. Nacítání funguje následujícím zpusobem:
def nacti_emaily(self, kategorie=0, strana = 0):
self.listbox.DeleteAllItems()
s=shelve.open("Db/%s.db"%kategorie)
rozsah= []
for x in range(strana*100, strana*100 + 100):
rozsah.append(str(x))
for prvek in s:
if prvek == "id": continue
if prvek in rozhrani:
self.pridej_zaznam(s[prvek][0], prvek, precteny=s[prvek][1])
s.close()
Aby nacítání trvalo alespon o trochu méne, rozhodl jsem zavést stránkování (na jedné strane pouze 100 mailu), ale moc jsem si nepomohl, protze stejne musím procházet vsemi e-maily a zobrazovat pouze ty z daného rozsahu. Ve funkci pridej_zaznam jeste musím získat odesílatele, predmet a cas prijetí, coz zabere taky relativne dost casu.
Jak by se dal celý postup zefektivnit?
Dekuji za kazdou odpoved
Jakub Vojácek
------------- dal¹í èást ---------------
HTML p?íloha byla odstran?na...
URL: http://www.py.cz/pipermail/python/attachments/20080429/1c09ac21/attachment.htm
Další informace o konferenci Python