当前位置:首页>python>Python自动周报:清洗+出图+发邮件一条龙

Python自动周报:清洗+出图+发邮件一条龙

  • 2026-10-11 06:56:36
Python自动周报:清洗+出图+发邮件一条龙

Python自动周报:清洗+出图+发邮件一条龙

之前给大家零散的分享了PY自动做数据发邮件的信息,今天汇总起来给大家一起梳理一下,思路并不复杂:用Python把"取数→清洗→出图→发邮件"四步串起来,按一下回车,五分钟全搞定批量复杂性工作。

第一步:数据清洗(pandas)

原始表常遇的三类脏数据:重复行、缺失值、日期按字符串存储。一般处理顺序为:先去重,再修类型,最后兜底缺失。

import pandas as pd

df = pd.read_excel('sales.xlsx')

# 1. 去重

df = df.drop_duplicates()

# 2. 日期转成时间类型

df['日期'] = pd.to_datetime(df['日期'])

# 3. 缺失业绩填0,门店填空串

df['业绩'] = df['业绩'].fillna(0)

df['门店'] = df['门店'].fillna('未知')

# 4. 只保留本月

df = df[df['日期'] >= '2026-08-01']

print(df.shape)

第二步:出图(matplotlib)

清洗完后可以直接用matplotlib生成一张门店业绩柱状图,存成图片,后面直接塞进邮件。这一步比较麻烦的是布局,经常会遇到图片被缺失一半的情况。

import matplotlib

matplotlib.use('Agg')

import matplotlib.pyplot as plt

top = df.groupby('门店')['业绩'].sum().sort_values(ascending=False).head(10)

plt.figure(figsize=(10, 6))

top.plot(kind='barh')

plt.title('本月门店业绩TOP10')

plt.tight_layout()

plt.savefig('top_shops.png', dpi=120)

不加 tight_layout,图片右边经常被切掉一截。savefig 之前一定确认一下。

第三步:自动发邮件(smtplib)

图和表都齐了,最后一发邮件。把图片按附件格式塞到邮件,点开就能看。

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.mime.image import MIMEImage

msg = MIMEMultipart()

msg['Subject'] = '本周门店业绩自动报表'

msg['From'] = 'me@company.com'

msg['To'] = 'boss@company.com'

with open('top_shops.png', 'rb') as f:

    img = MIMEImage(f.read())

img.add_header('Content-ID', '<chart>')

msg.attach(img)

msg.attach(MIMEText('图表见附件图片', 'plain'))

with smtplib.SMTP('smtp.company.com', 25) as s:

    s.send_message(msg)

收尾

这套跑顺之后,每周能节省1-2小时。建议先拿最重复性-且不会经常变动的固定格式周报试手,先用本地Excel文件跑通,再连SQL自动取数。第一遍跑通了后面就会轻松很多。

之前的文章,后续这个事项就不再多关注了

告别手动发周报:Python自动发邮件完整方案

我用Python把数据周报从3小时压缩到10分钟

最新文章

随机文章