python自动化报表定时跑_自动化篇:用python发送定时邮件

很多数据分析师的工作的流程:

(1)数据库取数-->(2)根据业务主题分析汇总数据-->(3)邮件汇报分析结果。

对于1、2步而言,一般都是使用python或者R语言编写程序进行任务处理(也可以是Scala等处理spark平台的海量数据)

通常情况下对于相似主题的数据分析任务,可以重复使用之前的程序。比如业务决策层想每天10点准时看某项业务的数据表现,此时分析的任务就是固定的,如果不会自动定时发邮件,那就要求分析师每天10点准时统计数据,并且手动编写邮件内容、添加附件后发送邮件,这听起来不是高效的方式。试想如果每天花5-10分钟在编写重复结构的邮件上,一年下来就是30-60小时,如果会自动发邮件,这笔时间就省下来了。

废话不多说,上代码:

实现邮件功能的脚本 main.py:

# -*- coding: utf-8 -*-

"""

@author: heting

"""

import smtplib

import email

from email.mime import multipart# import MIMEMultipart

from email.mime import text# import MIMEText

from email.mime import base# import MIMEBase

import os.path

import mimetypes

#邮箱认证

#"username": "***@***.com",

#"password": "******",

def Send_email(file_name_list,email_text,recei_list):

mail_info = {

"from": "***@***.com",#自己的邮箱账号

"to": "***@***.com",#接收邮件的对方账号

"hostname": "smtp.exmail.qq.com",

"username": "***@***.com",#开通smtp服务的邮箱账号

"password": "******",#开通smtp服务的对应密码

"mail_subject": "test",

"mail_text": "hello, this is a test email, sended by python",

"mail_encoding": "utf-8"

}

server = smtplib.SMTP_SSL(mail_info["hostname"],port=465)

server.ehlo(mail_info["hostname"])

server.login(mail_info["username"],mail_info["password"])#仅smtp服务器需要验证时

# 构造MIMEMultipart对象做为根容器

main_msg = multipart.MIMEMultipart()

# 构造MIMEText对象做为邮件显示内容并附加到根容器

text_msg = text.MIMEText(email_text,_charset="utf-8")

main_msg.attach(text_msg)

# 构造MIMEBase对象做为文件附件内容并附加到根容器

for file_name in file_name_list:

## 读入文件内容并格式化 [方式1]

data = open(file_name, 'rb')

ctype,encoding = mimetypes.guess_type(file_name)

if ctype is None or encoding is not None:

ctype = 'application/octet-stream'

maintype,subtype = ctype.split('/',1)

file_msg = base.MIMEBase(maintype, subtype)

file_msg.set_payload(data.read())

data.close()

email.encoders.encode_base64(file_msg)#把附件编码

## 设置附件头

basename = os.path.basename(file_name)

file_msg.add_header('Content-Disposition','attachment', filename = basename,encoding='utf-8')

main_msg.attach(file_msg)

# 设置根容器属性

main_msg['From'] = mail_info['from']

main_msg['To'] = ';'.join(recei_list)

main_msg['Subject'] = email_text

main_msg['Date'] = email.utils.formatdate()

#得到格式化后的完整文本

fullText = main_msg.as_string()

#用smtp发送邮件

try:

server.sendmail(mail_info['from'], recei_list, fullText)

finally:

server.quit()

类似的可以网上搜索如何开通所使用类型邮箱的smtp服务。

实现定时功能的脚本 timer.py:

# -*- coding: utf-8 -*-

"""

@author: heting

"""

# 以需要的时间间隔执行某个命令

import time, os

import logging

def re_exe(cmd_list, inc = 10):

while True:

ts_start = datetime.datetime.now()

if ts_start.hour==10:#每天10点定时运行task脚本

for cmd in cmd_list:

os.system(cmd);

logging.info('update sucess!-->%s分割线----------'%ts_start.strftime('%Y%m%d %H:%M:%S'),'\n')

time.sleep(inc)

cmd_list = ['python task.py']

re_exe(cmd_list, 10)

实现数据分析任务的脚本:task.py

#此处发送2张dataframe样表为例,应该放入实际的数据分析任务代码

from pandas import DataFrame

from main import Send_email

import datetime

import os

os.chdir('./')

df1 = DataFrame({'type':['a','b','c','d'],'value':[1,2,3,4]})

df2 = DataFrame({'type':['e','f','g','h'],'value':[5,6,7,8]})

df1.to_excel('df1.xlsx')

df2.to_excel('df2.xlsx')

#将2张表邮件发送

file_name_list = ['df1.xlsx','df2.xlsx']

email_text = "%s数据分析结果"%datetime.datetime.now().strftime('%Y%m%d %H')

recei_list = ['12345678@qq.com','66666666@qq.com']#写上自己的邮箱测试一下

Send_email(file_name_list,email_text,recei_list)

打印一下df1和df2表具体内容:

type value

0 a 1

1 b 2

2 c 3

3 d 4

type value

0 e 5

1 f 6

2 g 7

3 h 8

最后我们只需要在后台运行timer.py就OK了,收件列表里面的邮箱用户就能每天定时收到这两张表了,

不用守着电脑发邮件了 ,把省出来的时间听听音乐或者学习新技能吧!

如果您觉得有帮助的话,可以扫码,赞赏鼓励一下!谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值