一些线上化刚刚起步的部门,并不是所有的数据都是直接推送到服务器的数据库中,有些数据往往是数据中心通过邮件形式推送的,如果每天接收邮件--下载附件--解压--合并文件--导入数据库,对于数据工程师来说,这无疑是琐碎且没有技术含量的工作,任谁都不愿意在这种工作上面浪费时间。对于这样的工作,最适合用代码自动完成了。

下面就是用 Python 完成下载邮箱附件并解压的代码了,如果还需要合并文件,可以查看博客该分类下的另一篇文章。

# coding: utf-8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import poplib
import email
import datetime
import time # import re
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
import zipfile
import chardetpoplib._MAXLINE=204800  # 输入邮件地址, 口令和POP3服务器地址:
email = '***************@163.com'#此处填写邮箱账号
password = '**********'#此处填写邮箱密码
pop3_server = 'pop.163.com'
today=datetime.datetime.now()
gap=datetime.timedelta(days=1)
date=today-gap
str_date=date.strftime('%m%d')
str_date2=today.strftime('%m%d')
file1="回盘业绩"
file2="_8月预催收业绩"
file3="全量账户报表"
filename2=[file1,file2,file3]def decode_str(s):#字符编码转换 value, charset = decode_header(s)[0] if charset: value = value.decode(charset) return value def get_att(msg,filename2): import email attachment_files1= [] attachment_files2= [] for part in msg.walk(): file_name = part.get_filename()#获取附件名称类型 contType = part.get_content_type() if file_name:  h = email.header.Header(file_name) dh = email.header.decode_header(h)#对附件名称进行解码 filename = dh[0][0] if dh[0][1]: filename = decode_str(str(filename,dh[0][1]))#将附件名称可读化 print(filename) #filename = filename.encode("utf-8")if (filename[3:7] in filename2) or (filename[7:11] in filename2):data = part.get_payload(decode=True)#下载附件 att_file = open(R'E:\\邮件下载\\' + "回盘业绩.xlsx", 'wb')attachment_files1.append(filename) att_file.write(data)#保存附件 att_file.close()elif filename[:6] ==filename2[2]:data = part.get_payload(decode=True)#下载附件 att_file = open(R'E:\\邮件下载\\' + filename, 'wb')attachment_files2.append(filename) att_file.write(data)#保存附件 att_file.close()return attachment_files2 # 连接到POP3服务器,有些邮箱服务器需要ssl加密,对于不需要加密的服务器可以使用poplib.POP3()
server = poplib.POP3_SSL(pop3_server)
server.set_debuglevel(1)
# 打印POP3服务器的欢迎文字:
print(server.getwelcome().decode('utf-8'))
# 身份认证:
server.user(email)
server.pass_(password)
# 返回邮件数量和占用空间:
print('Messages: %s. Size: %s' % server.stat())
# list()返回所有邮件的编号:
resp, mails, octets = server.list()
# 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]
print(mails)
index = len(mails) f_list2=[]
for i in range(index,0,-1):
#倒序遍历邮件 resp, lines, octets = server.retr(i) # lines存储了邮件的原始文本的每一行, #邮件的原始文本: result=chardet.detect(lines[0])print(result)msg_content = b'\r\n'.join(lines).decode("utf-8","ignore")#"ignore"#解析邮件: msg = Parser().parsestr(msg_content) #获取邮件时间 date1 = time.strptime(msg.get("Date")[0:24],'%a, %d %b %Y %H:%M:%S') #格式化收件时间 date2 = time.strftime("%m%d", date1)#邮件时间格式转换 if date2==str_date2: f_list = get_att(msg,filename2)#获取附件f_list2.append(f_list)elif date2<str_date2:break
print(f_list2)    for i in f_list2:if len(i)!=0:f = zipfile.ZipFile(R'E:\\邮件下载\\' + i[0],'r')for file in f.namelist():f.extract(file,R'E:\\邮件下载\\excel\\')     f.close()else:continue#print_info(msg)
server.quit()

获取数据 - 下载附件解压附件 - Python代码相关推荐

  1. Python批量下载CHIRPS气象数据并完成解压裁剪等

    文章目录 前言 一.CHIRPS是什么? 二.实现步骤 1.下载数据 2.解压缩 3.批量裁剪 三.完整代码如下 四.代码结果 前言   最近需要下载气象数据--CHIRPS,借助之前学的批量下载哨兵 ...

  2. Android——SRT字幕文件的下载、解压、转换、显示

    SRT字幕文件的下载.解压.显示 简介 下载 创建文件夹 文件下载 下载调用以及文件解析调用 解析 ZIP文件解析 外部引用 转换 转换SRT字幕文件 获取SRT文件list实体数据 显示 字幕显示 ...

  3. ZIP 也能边下载边解压?流式解压技术揭秘!

    对于一个 ZIP 文件,由于标准的解压方式总是从读取文件的末尾开始的,因此必须下载完整个 ZIP 解压后才能访问.当用户通过网络访问 ZIP 文件时,下载解压所带来的耗时将大大降低用户体验.那么能不能 ...

  4. 小程序资源下载、解压、保存到本地及本地文件的使用

    小程序对资源存储有限一般10M,不要超过限制 思路解析:将资源保存到本地,首先 需要获取到 本地路径 ,然后将文件下载(下载前需要判断文件是否更新,第一次和更新则需要下载,如果存在之前的资源则将其删除 ...

  5. python批量解压文件,python批量解压zip文件的方法

    python怎样压缩和解压缩ZIP文件 说明 python使用zipfile模块来压缩和解压zip文件 才能最好于孤独中培养:品格最好在世界的汹涌波涛中形成. 代码 import os,os.path ...

  6. DeepFashion2服饰数据集下载(附解压密码)

    DeepFashion2服饰数据集下载(附解压密码): https://download.csdn.net/download/stq054188/12185469

  7. 64位java8,jdk8下载,解压版

    JAVA8使用量非常广泛,但是找下往往都是安装版的,想我这种人直接自己配置环境变量用,十分不想搞个安装版, 下面是解压版的,下面是打印出的version信息 wndows版本的 下面是java – v ...

  8. ActiveMQ的安装和启动 安装JAVA配置JAVA环境 下载ActiveMQ 解压压缩包 tar zxvf activemq-x.x.x-bin.tar.gz 至此,linux下Activ

    ActiveMQ的安装和启动 安装JAVA配置JAVA环境 下载ActiveMQ 解压压缩包  tar zxvf activemq-x.x.x-bin.tar.gz 至此,linux下ActiveMQ ...

  9. vue+django下载压缩包解压失败处理办法

    (1)压缩包下载后解压失败,处理办法:将responsetype设置为arraybuffer即可 参考: https://bbs.csdn.net/topics/398186621?page=1 (2 ...

最新文章

  1. 关于矩形连线 (rectangle connect)
  2. xampp php源码的路径,php – XAMPP中的根路径
  3. C语言实现Dijkstra(迪杰斯特拉)算法(附完整源码)
  4. 词语搜索算法思想 - 第五步 结构实现
  5. SAP Spartacus里和focus相关的directive之间的继承关系
  6. atheros蓝牙设备驱动 小米_小米Air 13笔记本黑苹果WiFi蓝牙硬件改装方案二
  7. 线性表(代码、分析、汇编)
  8. Spring Cloud Config 规范
  9. python数据结构剑指offer-构建乘积数组
  10. 多线程之-并发任务间交换数据
  11. alitum designer 的PCB生成gerber文件步骤
  12. 阿里代码规范检查工具的安装使用
  13. Word插入高分辨率图片无法显示
  14. 如何将已有图片做成透明水印_手把手教你如何使用Photoshop CC 2014给图片添加透明水印的教程-网络教程与技术 -亦是美网络...
  15. java开发中的dorado_dorado7开发常用技巧及代码
  16. 开发工具之IAR下载与安装
  17. ifb与tc police对接收方向限速性能比较
  18. 计算机机房 网络安全,机房网络安全建设标准参考
  19. 版本控制系统的集中式和分布式
  20. oracle锁表后,系统能否自动解锁?

热门文章

  1. WIN10 vagrant和virtualbox虚拟机和一键搭建lnmp环境配置thinkphp虚拟主机
  2. java基础-public/private/protected的具体区别
  3. activity-启动动画的设定(下面弹出出现,弹入下面消失)
  4. POJ-1707 Sum of powers bernoulli方程
  5. xcode 4.2开发 ——navigation controller 添加按钮
  6. Windows phone 应用开发[14]-调用WebBrowser
  7. 单例模式(Java)
  8. 上午写了一段代码,下午就被开除了~
  9. 如何向开源社区奉献代码
  10. 十分钟让你明白AIDL