您现在的位置是:首页 > 文章详情

Python读取指定日期邮件

日期:2017-11-08点击:569

背景:9月份有部分数据缺失,这部分数据在邮箱里,需要重新拉取,但是每天几百封邮件,总共有6、7万封邮件,使用stat()和retr(which)结合遍历很

耗时

基于如上背景,初始大致思路为:

使用二分法获取到需要恢复数据时间范围内的中间一个值,也就是第几封邮件,然后分两头遍历,

读取到所有需要的邮件

算法函数:

1、获取到邮件的时间,由于可能收到格林威治时间邮件,所以这里做了相应的处理

 

[python] view plain  copy

 

  1. def getTimeStamp(cn):  
  2.     messages=mailServer.retr(cn)[1]  
  3.     mail = email.message_from_bytes('\n'.encode('utf-8').join(messages))  
  4.     date=email.header.decode_header(mail.get('date'))  
  5.     utcstr = date[0][0].replace('+00:00','')  
  6.     global utcdatetime  
  7.     try:  
  8.         utcdatetime = datetime.datetime.strptime(utcstr, '%a, %d %b %Y %H:%M:%S +0000 (GMT)')  
  9.         localdatetime = utcdatetime + datetime.timedelta(hours=+8)  
  10.         localtimestamp = localdatetime.timestamp()  
  11.     except:  
  12.         utcdatetime = datetime.datetime.strptime(utcstr, '%a, %d %b %Y %H:%M:%S +0800')  
  13.         localtimestamp = utcdatetime.timestamp()  
  14.     return localtimestamp  

 

 

2、二分法

[python] view plain  copy

 

  1. bu_daytimestamp yesterdaytimestamp两个是需要补数据的时间戳  


[python] view plain  copy

 

  1. key_nums=0  
  2. mid2=mailCount  
  3. while 1==1:  
  4.     mid=getTimeStamp(round(mailCount))  
  5.     mid2=round(mid2/2)  
  6.     if mid >bu_daytimestamp:  
  7.         mailCount=mailCount-mid2  
  8.     elif mid<yesterdaytimestamp:  
  9.         mailCount=mailCount+mid2  
  10.     elif mid <=bu_daytimestamp and mid >=yesterdaytimestamp:  
  11.         key_nums=mailCount  
  12.         break  
  13.     print(mailCount)  
  14. print(key_nums)  

 

这里只记录算法,后续遍历比较简单,就不展示了

解释下部分参数:

 

[python] view plain  copy

 

  1. mailServer:登录后的邮箱  
[python] view plain  copy

 

  1. <pre name="code" class="python">mailCount:总的邮件数量,来源于mailServer.stat()第二个参数</pre><pre name="code" class="python"></pre>  
  2.  

 

 
原文链接:https://www.centoschina.cn/yunwei/python/9176.html
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章