获取数据 - 下载附件解压附件 - Python代码
一些线上化刚刚起步的部门,并不是所有的数据都是直接推送到服务器的数据库中,有些数据往往是数据中心通过邮件形式推送的,如果每天接收邮件--下载附件--解压--合并文件--导入数据库,对于数据工程师来说,这无疑是琐碎且没有技术含量的工作,任谁都不愿意在这种工作上面浪费时间。对于这样的工作,最适合用代码自动完成了。
下面就是用 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代码相关推荐
- Python批量下载CHIRPS气象数据并完成解压裁剪等
文章目录 前言 一.CHIRPS是什么? 二.实现步骤 1.下载数据 2.解压缩 3.批量裁剪 三.完整代码如下 四.代码结果 前言 最近需要下载气象数据--CHIRPS,借助之前学的批量下载哨兵 ...
- Android——SRT字幕文件的下载、解压、转换、显示
SRT字幕文件的下载.解压.显示 简介 下载 创建文件夹 文件下载 下载调用以及文件解析调用 解析 ZIP文件解析 外部引用 转换 转换SRT字幕文件 获取SRT文件list实体数据 显示 字幕显示 ...
- ZIP 也能边下载边解压?流式解压技术揭秘!
对于一个 ZIP 文件,由于标准的解压方式总是从读取文件的末尾开始的,因此必须下载完整个 ZIP 解压后才能访问.当用户通过网络访问 ZIP 文件时,下载解压所带来的耗时将大大降低用户体验.那么能不能 ...
- 小程序资源下载、解压、保存到本地及本地文件的使用
小程序对资源存储有限一般10M,不要超过限制 思路解析:将资源保存到本地,首先 需要获取到 本地路径 ,然后将文件下载(下载前需要判断文件是否更新,第一次和更新则需要下载,如果存在之前的资源则将其删除 ...
- python批量解压文件,python批量解压zip文件的方法
python怎样压缩和解压缩ZIP文件 说明 python使用zipfile模块来压缩和解压zip文件 才能最好于孤独中培养:品格最好在世界的汹涌波涛中形成. 代码 import os,os.path ...
- DeepFashion2服饰数据集下载(附解压密码)
DeepFashion2服饰数据集下载(附解压密码): https://download.csdn.net/download/stq054188/12185469
- 64位java8,jdk8下载,解压版
JAVA8使用量非常广泛,但是找下往往都是安装版的,想我这种人直接自己配置环境变量用,十分不想搞个安装版, 下面是解压版的,下面是打印出的version信息 wndows版本的 下面是java – v ...
- 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 ...
- vue+django下载压缩包解压失败处理办法
(1)压缩包下载后解压失败,处理办法:将responsetype设置为arraybuffer即可 参考: https://bbs.csdn.net/topics/398186621?page=1 (2 ...
最新文章
- 关于矩形连线 (rectangle connect)
- xampp php源码的路径,php – XAMPP中的根路径
- C语言实现Dijkstra(迪杰斯特拉)算法(附完整源码)
- 词语搜索算法思想 - 第五步 结构实现
- SAP Spartacus里和focus相关的directive之间的继承关系
- atheros蓝牙设备驱动 小米_小米Air 13笔记本黑苹果WiFi蓝牙硬件改装方案二
- 线性表(代码、分析、汇编)
- Spring Cloud Config 规范
- python数据结构剑指offer-构建乘积数组
- 多线程之-并发任务间交换数据
- alitum designer 的PCB生成gerber文件步骤
- 阿里代码规范检查工具的安装使用
- Word插入高分辨率图片无法显示
- 如何将已有图片做成透明水印_手把手教你如何使用Photoshop CC 2014给图片添加透明水印的教程-网络教程与技术
-亦是美网络...
- java开发中的dorado_dorado7开发常用技巧及代码
- 开发工具之IAR下载与安装
- ifb与tc police对接收方向限速性能比较
- 计算机机房 网络安全,机房网络安全建设标准参考
- 版本控制系统的集中式和分布式
- oracle锁表后,系统能否自动解锁?
热门文章
- WIN10 vagrant和virtualbox虚拟机和一键搭建lnmp环境配置thinkphp虚拟主机
- java基础-public/private/protected的具体区别
- activity-启动动画的设定(下面弹出出现,弹入下面消失)
- POJ-1707 Sum of powers bernoulli方程
- xcode 4.2开发 ——navigation controller 添加按钮
- Windows phone 应用开发[14]-调用WebBrowser
- 单例模式(Java)
- 上午写了一段代码,下午就被开除了~
- 如何向开源社区奉献代码
- 十分钟让你明白AIDL