Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱
↑ 关注 + 星标 ,每天学Python新技能
后台回复【大礼包】送你Python自学大礼包
项目背景
一、报表自动化目的
1.节省时间,提高效率
2.减少错误
二、报表自动化范围
1.频率
2.开发时间
3.流程
三、实现步骤
总体概览指标
反映某一数据指标的整体大小对比性指标
环比
相邻时间段内的指标直接作差同比
相邻时间段内某一共同时间点上指标的对比集中趋势指标
中位数
众数
平均数/加权平均数
离散程度指标
标准差
方差
四分位数
全距(极差)
最大界减最小界相关性指标
r
第一步:读取数据源文件
import pandas as pdimport jsonimport pymysqlfrom sqlalchemy import create_engine# 打开数据库连接conn = pymysql.connect(host='localhost',port=3306,user='root',passwd='xxxx',charset = 'utf8')engine=create_engine('mysql+pymysql://root:xxxx@localhost/mysql?charset=utf8')def read_excel(file):df_excel=pd.read_excel(file)return df_exceldef read_json(file):with open(file,'r')as json_f:df_json=pd.read_json(json_f)return df_jsondef read_sql(table):sql_cmd ='SELECT * FROM %s'%tabledf_sql=pd.read_sql(sql_cmd,engine)return df_sqldef read_csv(file):df_csv=pd.read_csv(file)return df_csv
第二步:DataFrame计算
df=df[df['city_num'].notna()]df=df.drop(df[df['city_num']=='error'].index)df = df.city_num.value_counts()
def pie_chart(df):#将城市空值的一行删除df=df[df['city_num'].notna()]#删除errordf=df.drop(df[df['city_num']=='error'].index)#统计df = df.city_num.value_counts()df.head(10).plot.pie(subplots=True,figsize=(5, 6),autopct='%.2f%%',radius = 1.2,startangle = 250,legend=False)pie_chart(read_csv('user_info.csv'))
plt.savefig('fig_cat.png')pie = Pie()pie.add("",words)pie.set_global_opts(title_opts=opts.TitleOpts(title="前十地区"))#pie.set_series_opts(label_opts=opts.LabelOpts(user_df))pie.render_notebook()
def echart_pie(user_df):user_df=user_df[user_df['city_num'].notna()]user_df=user_df.drop(user_df[user_df['city_num']=='error'].index)user_df = user_df.city_num.value_counts()name=user_df.head(10).index.tolist()value=user_df.head(10).values.tolist()words=list(zip(list(name),list(value)))pie = Pie()pie.add("",words)pie.set_global_opts(title_opts=opts.TitleOpts(title="前十地区"))return pie.render_notebook()user_df=read_csv('user_info.csv')echart_pie(user_df)
可以进行保存,可惜不是动图:
from snapshot_selenium import snapshotmake_snapshot(snapshot,echart_pie(user_df).render(),"test.png")
保存为网页的形式就可以自动加载JS进行渲染了:
echart_pie(user_df).render('problem.html')os.system('problem.html')
第三步:自动发送邮件
import smtplibfrom email import encodersfrom email.header import Headerfrom email.utils import parseaddr,formataddrfrom email.mime.application import MIMEApplicationfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMEText#发件人邮箱asender="fanstuck@163.com"#收件人邮箱areceiver="1079944650@qq.com"#抄送人邮箱acc="fanstuck@163.com"#邮箱主题asubject="谢谢关注"#发件人地址from_addr="fanstuck@163.com"#邮箱授权码password="####"#邮件设置msg=MIMEMultipart()msg['Subject']=asubjectmsg['to']=areceivermsg['Cc']=accmsg['from']="fanstuck"#邮件正文body="你好,欢迎关注fanstuck,您的关注就是我继续创作的动力!"msg.attach(MIMEText(body,'plain','utf-8'))#添加附件htmlFile = 'C:/Users/10799/problem.html'html = MIMEApplication(open(htmlFile , 'rb').read())html.add_header('Content-Disposition', 'attachment', filename='html')msg.attach(html)#设置邮箱服务器地址和接口smtp_server="smtp.163.com"server = smtplib.SMTP(smtp_server,25)server.set_debuglevel(1)#登录邮箱server.login(from_addr,password)#发生邮箱server.sendmail(from_addr,areceiver.split(',')+acc.split(','),msg.as_string())#断开服务器连接server.quit()
评论












