2024年使用Python自动生成报表以邮件发送,春招直接面试

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

  • datetime Python标准库中自带的关于时间的库

  • openpyxl 一个可以读写07版以后的Excel文档(.xlsx格式也支持)的库

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

  • email 一个用来处理邮件消息的库

为什么使用openpyxl库来处理Excel呢?因为它支持每个sheet的行数为100W+,也是支持xlsx格式的文件。如果你接受xls文件,并且每个sheet的行数小于6W,也是可以使用xlwt库,它对大文件的读取速度要大于openpyxl。

接下来我们就进入实战部分,来正式实现这个过程。我把整个实现过程分成几个函数的方式来实现,这样看着会比较有结构感。

一、首先导入所有要用到的库

encoding=utf-8

import pymysql as pms

import openpyxl

import datetime

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.header import Header

import smtplib

二、 编写一个传入sql就返回数据的函数get_datas(sql)

def get_datas(sql):

一个传入sql导出数据的函数

跟数据库建立连接

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

passwd=‘密码’, database=‘库名’, port=3306, charset=“utf8”)

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

cur = conn.cursor()

使用 execute() 方法执行 SQL

cur.execute(sql)

获取所需要的数据

datas = cur.fetchall()

#关闭连接

cur.close()

#返回所需的数据

return datas

三、 编写一个传入sql就返回数据的字段名称的函数get_datas(sql),因为一个函数只能返回一个值,这边就用2个函数来分别返回数据和字段名称(也就是excel里的表头)

def get_fields(sql):

一个传入sql导出字段的函数

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

passwd=‘pcNzcKPnn’, database=‘kikuu’, port=3306, charset=“utf8”)

cur = conn.cursor()

cur.execute(sql)

获取所需要的字段名称

fields = cur.description

cur.close()

return fields

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

def get_excel(data, field, file):

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

#新建一个工作薄对象

new = openpyxl.Workbook()

#激活一个新的sheet

sheet = new.active

#给sheet命名

sheet.title = ‘数据展示’

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

for col in range(len(field)):

#row代表行数,column代表列数,value代表单元格输入的值,行数和列数都是从1开始,这点于python不同要注意

_ = sheet.cell(row=1, column=col+1, value=u’%s’ % field[col][0])

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

for row in range(len(data)):

for col in range(len(field)):

#因为第一行写了字段名称,所以要从第二行开始写入

_ = sheet.cell(row=row+2, column=col + 1, value=u’%s’ % data[row][col])

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

newworkbook = new.save(file)

#返回生成的excel

return newworkbook

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

def getYesterday():

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

#获取今天的日期

today = datetime.date.today()

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

oneday = datetime.timedelta(days=1)

#昨天等于今天减去一天

yesterday = today - oneday

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

yesterdaystr = yesterday.strftime(‘%Y-%m-%d’)

#返回昨天的字符串

return yesterdaystr

六、编写一个生成邮件的函数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):

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

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

message = MIMEMultipart()

#将正文以text的形式插入邮件中

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

#生成发件人名称(这个跟发送的邮件没有关系)

message[‘From’] = Header(email_from, ‘utf-8’)

#生成收件人名称(这个跟接收的邮件也没有关系)

message[‘To’] = Header(email_to, ‘utf-8’)

#生成邮件主题

message[‘Subject’] = Header(email_Subject, ‘utf-8’)

#读取附件的内容

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

att1[“Content-Type”] = ‘application/octet-stream’

#生成附件的名称

att1[“Content-Disposition”] = ‘attachment; filename=’ + annex_name

#将附件内容插入邮件中

message.attach(att1)

#返回邮件

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值