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