Python讀取指定日期郵件的實(shí)例
背景:9月份有部分?jǐn)?shù)據(jù)缺失,這部分?jǐn)?shù)據(jù)在郵箱里,需要重新拉取,但是每天幾百封郵件,總共有6、7萬(wàn)封郵件,使用stat()和retr(which)結(jié)合遍歷很
耗時(shí)
基于如上背景,初始大致思路為:
使用二分法獲取到需要恢復(fù)數(shù)據(jù)時(shí)間范圍內(nèi)的中間一個(gè)值,也就是第幾封郵件,然后分兩頭遍歷,
讀取到所有需要的郵件
算法函數(shù):
1、獲取到郵件的時(shí)間,由于可能收到格林威治時(shí)間郵件,所以這里做了相應(yīng)的處理
def getTimeStamp(cn):
messages=mailServer.retr(cn)[1]
mail = email.message_from_bytes('\n'.encode('utf-8').join(messages))
date=email.header.decode_header(mail.get('date'))
utcstr = date[0][0].replace('+00:00','')
global utcdatetime
try:
utcdatetime = datetime.datetime.strptime(utcstr, '%a, %d %b %Y %H:%M:%S +0000 (GMT)')
localdatetime = utcdatetime + datetime.timedelta(hours=+8)
localtimestamp = localdatetime.timestamp()
except:
utcdatetime = datetime.datetime.strptime(utcstr, '%a, %d %b %Y %H:%M:%S +0800')
localtimestamp = utcdatetime.timestamp()
return localtimestamp
2、二分法
bu_daytimestamp yesterdaytimestamp兩個(gè)是需要補(bǔ)數(shù)據(jù)的時(shí)間戳
key_nums=0
mid2=mailCount
while 1==1:
mid=getTimeStamp(round(mailCount))
mid2=round(mid2/2)
if mid >bu_daytimestamp:
mailCount=mailCount-mid2
elif mid<yesterdaytimestamp:
mailCount=mailCount+mid2
elif mid <=bu_daytimestamp and mid >=yesterdaytimestamp:
key_nums=mailCount
break
print(mailCount)
print(key_nums)
這里只記錄算法,后續(xù)遍歷比較簡(jiǎn)單,就不展示了
解釋下部分參數(shù):
mailServer:登錄后的郵箱
mailCount:總的郵件數(shù)量,來(lái)源于mailServer.stat()第二個(gè)參數(shù)
以上這篇Python讀取指定日期郵件的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python如何使用正則表達(dá)式的前向、后向搜索及前向搜索否定模式詳解
這篇文章主要給大家介紹了關(guān)于python如何使用正則表達(dá)式的前向、后向搜索及前向搜索否定模式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-11-11
OpenCV-Python實(shí)現(xiàn)腐蝕與膨脹的實(shí)例
形態(tài)學(xué)操作主要包含:腐蝕,膨脹,開(kāi)運(yùn)算,閉運(yùn)算,形態(tài)學(xué)梯度運(yùn)算,頂帽運(yùn)算,黑帽運(yùn)算等操作,本文主要介紹了腐蝕與膨脹,感興趣的小伙伴們可以參考一下2021-06-06
Python中Selenium模擬JQuery滑動(dòng)解鎖實(shí)例
這篇文章主要介紹了Python中Selenium模擬JQuery滑動(dòng)解鎖實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
PyQt5每天必學(xué)之帶有標(biāo)簽的復(fù)選框
這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之復(fù)選框的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Flask創(chuàng)建并運(yùn)行數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)過(guò)程
Flask創(chuàng)建并運(yùn)行數(shù)據(jù)庫(kù)遷移的過(guò)程是一個(gè)涉及多個(gè)步驟的操作,旨在幫助開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中管理數(shù)據(jù)庫(kù)模式的變化,而不需要手動(dòng)地刪除和重建數(shù)據(jù)庫(kù)表,從而避免數(shù)據(jù)丟失,以下是一個(gè)詳細(xì)的步驟說(shuō)明,需要的朋友可以參考下2024-09-09
PyQt5打開(kāi)文件對(duì)話框QFileDialog實(shí)例代碼
這篇文章主要介紹了PyQt5打開(kāi)文件對(duì)話框QFileDialog實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02

