使用Python自动化报表邮件发送,高效减轻工作负担

更新:11-17 名人轶事 我要投稿 纠错 投诉

大家好,今天给各位分享使用Python自动化报表邮件发送,高效减轻工作负担的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

pymysql是一个可以连接MySQL实例并实现增删改查功能的库。

datetime是Python标准库自带的一个关于时间的库。

openpyxl是一个从07版本开始可以读写Excel文档的库(也支持.xlsx格式)

smtplib SMTP是简单邮件传输协议,Python简单封装成一个库

email 用于处理电子邮件的库

为什么使用openpyxl库来处理Excel?因为它支持每张100W+行,所以还支持xlsx格式的文件。如果接受xls文件并且每张表的行数小于6W,还可以使用xlwt库,它读取大文件的速度比openpyxl更快。

接下来我们就进入实践部分,正式实现这个流程。我把整个实现过程分成了几个函数来实现,这样看起来更加结构化。

1.首先导入所有需要用到的库

# 编码=utf-8

将pymysql 导入为pms

导入openpyxl

导入日期时间

从email.mime.text 导入MIMEText

从email.mime.multipart 导入MIMEMultipart

从email.header 导入标头

导入smtplib

2、编写一个函数get_datas(sql),传入sql后返回数据。

def get_datas(sql):

# 传入sql导出数据的函数

# 与数据库建立连接

conn=pms.connect(host="实例地址", user="用户",

passwd="密码",database="数据库名称",端口=3306,charset="utf8")

# 使用cursor()方法创建游标对象cursor

cur=conn.cursor()

# 使用execute()方法执行SQL

cur.执行(sql)

# 获取需要的数据

数据=cur.fetchall()

#关闭连接

cur.close()

#返回需要的数据

返回数据

3、编写一个函数get_datas(sql),传入sql后返回数据的字段名。因为一个函数只能返回一个值,所以这里使用了两个函数,分别返回数据和字段名(即excel中的表格头)

def get_fields(sql):

# 传入sql导出字段的函数

conn=pms.connect(host="rm-rj91p2yhl9dm2xmbixo.mysql.rds.aliyuncs.com", user="bi-analyzer",

密码="pcNzcKPnn",数据库="kikuu",端口=3306,字符集="utf8")

cur=conn.cursor()

cur.执行(sql)

# 获取需要的字段名称

字段=cur.description

cur.close()

返回字段

4、编写一个函数et_excel(data, field, file),传入数据、字段名、存储地址,返回一个excel。

def get_excel(数据、字段、文件):

# 将数据和字段名称写入excel的函数

#创建一个新的工作簿对象

新=openpyxl.Workbook()

#激活新工作表

工作表=new.active

#给工作表命名

sheet.

#循环将字段名写入excel第一行,因为字段格式列表包含列表,每个列表的第一个元素就是字段名

对于范围内的列(len(字段)):

#row代表行数,column代表列数,value代表单元格中输入的值。行数和列数都从1开始。这与Python不同,需要注意。

_=sheet.cell(行=1,列=列+1,值=u"%s"%字段[列][0])

#循环将数据写入excel的每个单元格

对于范围内的行(len(数据)):

对于范围内的列(len(字段)):

#因为字段名写在第一行,所以必须从第二行开始写。

_=sheet.cell(行=行+2,列=列+1,值=u"%s"%数据[行][列])

#保存生成的excel,这一步必不可少

newworkbook=new.save(文件)

#返回生成的excel

返回新工作簿

5、编写一个函数getYesterday(),自动获取昨天的日期字符串格式

def getYesterday():

# 获取昨天日期的字符串格式的函数

#获取今天的日期

今天=datetime.date.today()

#获取一天的日期格式数据

一天=datetime.timedelta(天=1)

#昨天等于今天减去一天

昨天=今天-有一天

#获取昨天日期的格式化字符串

昨天str=昨天.strftime("%Y-%m-%d")

#返回昨天的字符串

返回昨天str

6. 编写一个函数create_email(email_from, email_to, email_Subject, email_text,annex_path,annex_name) 来生成电子邮件。

def create_email(email_from、email_to、email_Subject、email_text、annex_path、annex_name):

# 输入发件人昵称、收件人昵称、主题、正文、附件地址、附件名称,生成邮件

#生成一个带有附件的空电子邮件实例

消息=MIMEMultipart()

#将正文作为文本插入到电子邮件中

message.attach(MIMEText(email_text, "plain", "utf-8"))

#生成发件人姓名(这个与发送的邮件无关)

消息["发件人"]=标头(email_from, "utf-8")

#生成收件人姓名(这个与收到的邮件无关)

消息["收件人"]=标头(email_to, "utf-8")

#生成邮件主题

消息["主题"]=标头(email_Subject, "utf-8")

#阅读附件内容

att1=MIMEText(open(annex_path, "rb").read(), "base64", "utf-8")

att1["内容类型"]="应用程序/八位字节流"

#生成附件名称

att1["内容处置"]="附件;文件名=" + 附件名

#将附件内容插入电子邮件

消息.attach(att1)

#返回电子邮件

返回消息

7. 生成一个函数send_email(sender,password,receiver,msg)用于发送电子邮件

def send_email(发件人、密码、收件人、消息):

# 输入电子邮件地址、密码、收件人和电子邮件内容来发送电子邮件的功能。

尝试:

#找到你发送邮件的服务器地址并以加密形式发送

server=smtplib.SMTP_SSL("smtp.mxhichina.com", 465) # 发件人邮箱中的SMTP 服务器

服务器.ehlo()

#登录您的帐户

server.login(sender, password) # 括号对应发件人的邮箱账号和邮箱密码

#发送邮件

server.sendmail(sender,receiver,msg.as_string()) # 括号分别对应发件人的电子邮件帐户、收件人的电子邮件帐户(列表)和电子邮件内容

print("邮件发送成功")

server.quit() # 关闭连接

除了Exception:

打印(traceback.print_exc())

print("发送邮件失败")

8.创建main函数,输入所有自定义内容,最后执行main函数

def main():

打印(日期时间.日期时间.now())

my_sql=sql="SELECT a.id "用户ID",

a.gmt创建"用户注册时间",

af.lastLoginTime "上次登录时间",

af.totalBuyCount "历史支付子数",

af.paidmountUSD "历史支付金额",

af.lastPayTime "用户上次付款时间"

从表a

LEFT JOIN tableb af ON a.id=af.accountId ;"

# 生成数据

my_data=get_datas(my_sql)

# 生成字段名称

my_field=get_fields(my_sql)

# 获取昨天的日期

昨天str=get昨天()

文件名

my_file_name="用户属性" + Tuesdaystr + ".xlsx"

#文件路径

file_path="D:/工作/报告/" + my_file_name

# 生成excel

get_excel(我的数据,我的字段,文件路径)

my_email_from="BI部门自动汇报机器人"

my_email_to="运营部门"

# 电子邮件标题

my_email_Subject="用户" + 昨天str

# 电子邮件文本

my_email_text="亲爱的,附件是每周数据,请查收!商业智能团队"

#附件地址

my_annex_path=文件路径

#附件名称

我的附件名称=我的文件名称

# 生成电子邮件

my_msg=create_email(my_email_from, my_email_to, my_email_Subject,

我的电子邮件文本、我的附件路径、我的附件名称)

my_sender="阿里云邮箱"

my_password="我的密码"

my_receiver=[10001@qq.com"]#收件人邮箱列表

# 发送电子邮件

发送电子邮件(我的发件人,我的密码,我的接收者,我的消息)

打印(日期时间.日期时间.now())

如果__name__=="__main__":

关于使用Python自动化报表邮件发送,高效减轻工作负担的内容到此结束,希望对大家有所帮助。

用户评论

怀念·最初

这太酷了!我可以想象这可以省去很多时间和精力。

    有20位网友表示赞同!

伪心

Python真是个神奇的语言,能解决这么多实际问题。

    有18位网友表示赞同!

从此我爱的人都像你

我也觉得自动生成报表真的很好用,尤其是有很多重复性的工作量时。

    有16位网友表示赞同!

柠栀

邮件发送也更加快捷方便了,不用手动一个个发。

    有8位网友表示赞同!

冷嘲热讽i

你分享一下你的代码吗?我很想学习如何实现的。

    有13位网友表示赞同!

墨城烟柳

这样可以提高效率的同时还能保证报表准确性,真是棒极了!

    有8位网友表示赞同!

红尘烟雨

我也打算用Python来自动化一些工作流程,现在听听你分享感觉更有动力了。

    有10位网友表示赞同!

来自火星的我

这确实能减轻很多工作压力,轻松了不少。

    有11位网友表示赞同!

↘▂_倥絔

我之前一直手动的做报表,现在想想好累啊!

    有18位网友表示赞同!

暖栀

这样一来工作时间可以用来做一些更有意义的事情了。

    有11位网友表示赞同!

可儿

学习一下Python自动化报表流程好像是个很好的方向。

    有8位网友表示赞同!

封心锁爱

自动化的世界越来越美好!

    有5位网友表示赞同!

tina

这也能节省很多人力成本啊,想想都是划算的。

    有12位网友表示赞同!

眼角有泪°

你用什么工具来生成报表呢?

    有11位网友表示赞同!

涐们的幸福像流星丶

你的邮件发送模板做得怎么样?我也想学习一下。

    有8位网友表示赞同!

冷青裳

感觉这种自动化技术将来会越来越常见!

    有7位网友表示赞同!

龙吟凤

我很羡慕有这样的技能能够提高效率,也希望能学起来!

    有18位网友表示赞同!

全网暗恋者

分享这种思路真的很棒,激励了我想自己也尝试自动化一些工作。

    有20位网友表示赞同!

最迷人的危险

未来我们应该都像你一样去使用技术来解放我们的双手!

    有13位网友表示赞同!

【使用Python自动化报表邮件发送,高效减轻工作负担】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:探索莆田仿制品集散地:揭秘十条热门购物地点 下一篇:完美重置:高效管理您的CSS重置文件夹