大家好,今天给各位分享使用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自动化报表邮件发送,高效减轻工作负担的内容到此结束,希望对大家有所帮助。
【使用Python自动化报表邮件发送,高效减轻工作负担】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这太酷了!我可以想象这可以省去很多时间和精力。
有20位网友表示赞同!
Python真是个神奇的语言,能解决这么多实际问题。
有18位网友表示赞同!
我也觉得自动生成报表真的很好用,尤其是有很多重复性的工作量时。
有16位网友表示赞同!
邮件发送也更加快捷方便了,不用手动一个个发。
有8位网友表示赞同!
你分享一下你的代码吗?我很想学习如何实现的。
有13位网友表示赞同!
这样可以提高效率的同时还能保证报表准确性,真是棒极了!
有8位网友表示赞同!
我也打算用Python来自动化一些工作流程,现在听听你分享感觉更有动力了。
有10位网友表示赞同!
这确实能减轻很多工作压力,轻松了不少。
有11位网友表示赞同!
我之前一直手动的做报表,现在想想好累啊!
有18位网友表示赞同!
这样一来工作时间可以用来做一些更有意义的事情了。
有11位网友表示赞同!
学习一下Python自动化报表流程好像是个很好的方向。
有8位网友表示赞同!
自动化的世界越来越美好!
有5位网友表示赞同!
这也能节省很多人力成本啊,想想都是划算的。
有12位网友表示赞同!
你用什么工具来生成报表呢?
有11位网友表示赞同!
你的邮件发送模板做得怎么样?我也想学习一下。
有8位网友表示赞同!
感觉这种自动化技术将来会越来越常见!
有7位网友表示赞同!
我很羡慕有这样的技能能够提高效率,也希望能学起来!
有18位网友表示赞同!
分享这种思路真的很棒,激励了我想自己也尝试自动化一些工作。
有20位网友表示赞同!
未来我们应该都像你一样去使用技术来解放我们的双手!
有13位网友表示赞同!