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

yipeiwu_com7年前Python基础

背景: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的socket模块源码中的一些实现要点分析

BaseServer 和 BaseRequestHandler Python为网络编程提高了更高级的封装。SocketServer.py 提供了不少网络服务的类。它们的设计很优雅。Pyt...

举例讲解Python中的算数运算符的用法

举例讲解Python中的算数运算符的用法

下表列出了所有Python语言支持的算术运算符。假设变量a持有10和变量b持有20,则:  例子: 试试下面的例子就明白了所有的Python编程语言提供了算术运算符: #!...

Python OOP类中的几种函数或方法总结

概述 实例方法 使用实例调用时,默认传递实例本身到实例方法的第一个参数self 使用类调用时,必须传递一个实例对象到实例方法的第一个参数 静态方法 使用实例调用和类调用...

python编写分类决策树的代码

python编写分类决策树的代码

决策树通常在机器学习中用于分类。 优点:计算复杂度不高,输出结果易于理解,对中间值缺失不敏感,可以处理不相关特征数据。 缺点:可能会产生过度匹配问题。 适用数据类型:数值型和标称...

理解Python中的类与实例

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,...