我来为你详细讲解如何用Python生成每日报表数据(Excel)并邮件发送的实例教程。
1. 安装必要的库
首先,我们需要安装两个Python库:pandas
和openpyxl
。
pandas
用于将数据整理为需要生成的报表格式。openpyxl
用于将生成的报表保存为Excel格式,并且生成Excel的图表。
可以使用 pip 工具进行安装,打开命令行窗口,输入以下命令:
pip install pandas openpyxl
2. 准备数据
在开始编写Python代码之前,我们需要准备数据,数据可以通过读取数据库、API接口或Excel表格等渠道获取。
假设我们已经成功获取了需要生成报表的数据,现在我们需要将数据整理成符合报表格式的形式。
示例1:假设我们有一个商品销售记录的数据表,包括了每个商品的名称、销售数量和销售金额,我们需要按天来统计每个商品的销售量和销售金额,生成一个Excel表格作为每日报表。
示例2:假设我们有一个学生成绩记录的数据表,包括每个学生的姓名、学号、考试科目和成绩,我们需要按科目来统计每个学生的平均成绩和最高成绩,生成一个Excel表格作为每日报表。
3. 生成报表
接下来我们开始编写Python代码,将整理好的数据按照需要生成的格式生成报表。
示例1代码:
import pandas as pd
from openpyxl import Workbook
from openpyxl.chart import PieChart, Reference
# 读取数据
data = pd.read_csv("sales.csv")
# 按天统计销售量和销售金额
daily_sales = data.groupby('date').sum()[['quantity', 'amount']]
# 创建Excel工作簿
wb = Workbook()
ws = wb.active
ws.title = 'Daily Sales'
# 写入数据
ws['A1'] = 'Date'
ws['B1'] = 'Quantity'
ws['C1'] = 'Amount'
for i, (date, row) in enumerate(daily_sales.iterrows(), 2):
ws.cell(row=i, column=1, value=date)
ws.cell(row=i, column=2, value=row['quantity'])
ws.cell(row=i, column=3, value=row['amount'])
# 生成销售量饼图
pie = PieChart()
labels = Reference(ws, min_col=1, min_row=2, max_row=len(daily_sales)+1)
data = Reference(ws, min_col=2, min_row=1, max_row=len(daily_sales)+1)
pie.add_data(data)
pie.set_categories(labels)
ws.add_chart(pie, 'E2')
# 保存报表
wb.save('daily_sales.xlsx')
示例2代码:
import pandas as pd
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
# 读取数据
data = pd.read_excel('grades.xlsx')
# 按科目统计平均分和最高分
subject_grades = data.groupby('subject').agg(['mean', 'max'])['grade']
# 创建Excel工作簿
wb = Workbook()
ws = wb.active
ws.title = 'Subject Grades'
# 写入数据
ws['A1'] = 'Subject'
ws['B1'] = 'Average Grade'
ws['C1'] = 'Max Grade'
for i, (subject, row) in enumerate(subject_grades.iterrows(), 2):
ws.cell(row=i, column=1, value=subject)
ws.cell(row=i, column=2, value=row['mean'])
ws.cell(row=i, column=3, value=row['max'])
# 生成成绩柱状图
bar = BarChart()
labels = Reference(ws, min_col=1, min_row=2, max_row=len(subject_grades)+1)
avg_grades = Reference(ws, min_col=2, min_row=1, max_row=len(subject_grades)+1)
max_grades = Reference(ws, min_col=3, min_row=1, max_row=len(subject_grades)+1)
bar.add_data(avg_grades, titles_from_data=True)
bar.add_data(max_grades, titles_from_data=True)
bar.set_categories(labels)
ws.add_chart(bar, 'E2')
# 保存报表
wb.save('subject_grades.xlsx')
4. 发送邮件
将生成好的Excel文件作为邮件附件发送给指定人员,这里我们使用Python内置的email
模块进行邮件发送。
示例代码:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
# 发件人邮箱账号和密码
sender_email = 'example@163.com'
sender_password = 'password'
# 收件人邮箱列表
receivers = ['foo@bar.com', 'bar@foo.com']
# 邮件主题和正文
subject = 'Daily Report'
body = 'Please find attached the daily report.'
# 创建邮件
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = ', '.join(receivers)
msg['Subject'] = subject
msg.attach(MIMEText(body))
# 添加Excel附件
file = 'daily_sales.xlsx'
with open(file, "rb") as f:
attach = MIMEApplication(f.read(), _subtype="xlsx")
attach.add_header('Content-Disposition', 'attachment', filename=file)
msg.attach(attach)
# 发送邮件
with smtplib.SMTP('smtp.163.com', 25) as smtp:
smtp.login(sender_email, sender_password)
smtp.sendmail(sender_email, receivers, msg.as_string())
注:以上示例代码需要主动替换sender_email
、sender_password
和receivers
变量为你自己的邮箱账号、密码和收件人列表。
至此,我们已经完成了用Python生成每日报表数据(Excel)并邮件发送的实例教程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python生成每日报表数据(Excel)并邮件发送的实例 - Python技术站