2
我尝试写一些代码来阅读我的收件箱,如果现在处理一些附件。我决定这将是学习生成器如何工作的好时机,因为我想处理所有具有特定主题的消息。我得到的地步,我可以得到所有的附件和相关科目,但我有点不得不伪造其作为for i in range . . .
迭代器并没有前进,所以我在循环创建一个发电机来阅读电子邮件和处理消息
def read_email_from_gmail():
try:
print 'got here'
mail = imaplib.IMAP4_SSL(SMTP_SERVER)
mail.login(FROM_EMAIL,FROM_PWD)
mail.select('inbox')
type, data = mail.search(None, 'ALL')
mail_ids = data[0]
id_list = mail_ids.split()
first_email_id = int(id_list[0])
latest_email_id = int(id_list[-1])
print latest_email_id
while True:
for i in range(latest_email_id,first_email_id - 1, -1):
latest_email_id -= 1
#do stuff to get attachment and subject
yield attachment_data, subject
except Exception, e:
print str(e)
for attachment, subject in read_email_from_gmail():
x = process_attachment(attachment)
y = process_subject(subject)
是推进latest_email_id
还有更多的pythonic方法可以通过我的收件箱使用发电机在收件箱中保持状态?
你可能想你的代码比较[E-SATIS'(https://stackoverflow.com/a/642988/190597)。他显示了一种不同的方式来遍历消息,而不需要'for i in range(...)'循环。 – unutbu
我开始用这种方法,然后想知道一台发电机,所以我可以封装代码更好 - 其他的东西我必须做的每封电子邮件是非常广泛,就像我说的,我懒懒地想知道如何使用发电机 – PyNEwbie