Python读取指定日期邮件的实例


Posted in Python onFebruary 01, 2019

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

耗时

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

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

读取到所有需要的邮件

算法函数:

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

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两个是需要补数据的时间戳
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)

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

解释下部分参数:

mailServer:登录后的邮箱

mailCount:总的邮件数量,来源于mailServer.stat()第二个参数

以上这篇Python读取指定日期邮件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python运算符重载详解及实例代码
Mar 07 Python
Python进阶-函数默认参数(详解)
May 18 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
Nov 06 Python
Python搜索引擎实现原理和方法
Nov 27 Python
Python 2.7中文显示与处理方法
Jul 16 Python
Numpy之文件存取的示例代码
Aug 03 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
对python读取zip压缩文件里面的csv数据实例详解
Feb 08 Python
深入浅析Python中的迭代器
Jun 04 Python
Python换行与不换行的输出实例
Feb 19 Python
python中%格式表达式实例用法
Jun 18 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 #Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 #Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 #Python
深入理解Python异常处理的哲学
Feb 01 #Python
python for 循环获取index索引的方法
Feb 01 #Python
对python For 循环的三种遍历方式解析
Feb 01 #Python
python使用for循环计算0-100的整数的和方法
Feb 01 #Python
You might like
php &amp;&amp; 逻辑与运算符使用说明
2010/03/04 PHP
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
2020/05/29 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
python异步任务队列示例
2014/04/01 Python
Python中实现结构相似的函数调用方法
2015/03/10 Python
Python上传package到Pypi(代码简单)
2016/02/06 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
python global和nonlocal用法解析
2020/02/03 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
linux面试题参考答案(2)
2015/12/06 面试题
Linux Interview Questions For software testers
2012/06/02 面试题
党员一句话承诺大全
2014/03/28 职场文书
节水标语大全
2014/06/11 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
opencv检测动态物体的实现
2021/07/21 Python
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python