还在做重复的劳动,不如用Python自动生成Excel以邮件发送

用Python来制作生成自动报表(Excel),并把它以邮件的形式发送 数据分析师每天肯定都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的、产品的等等。并且大部分的报表都是重复性的工作,而这篇文章就是要帮助大家如何运用Python来实现报表的自动发送,解放你的劳动力,可以让你有时间去做更有意思的事情。 小编整理了数十套Python的学习资料,进群免费领取:834179111 好了,我们回到正题。 首先来介绍下实现自动报表要使用到的Python库: ... 阅读详情

数据分析师小王每天都要被各种各样的数据数据报表搞得焦头烂额,比如老板的,运营的、产品的等等。而且大部分报表都是重复性的工作。这篇文章就是帮助大家如何用Python来实现报表的自动发送,解放你的劳动力,可以让你有时间去做更有意思的事情。

要点:

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

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

·openpyxl 一个可以读写07版以后的Excel文档的库

·smtplib SMTP即简单邮件传输协议

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

01.

准备工作,导入相应的库

数据分析师日常大部分工作需要熟练掌握SQL和excel打交道,而且很多数据都带日期。所以我们需要导入下面这些模块:

pymysql,openxl,datatime,当然还有自动发邮件的email和smtplib模块。

# 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

(代码可以左右滑动)

02.

连接SQL

现在主流的数据库有两大类,SQL和NoSQL,虽然Mongodb非常灵活和简单,但是大部分公司的数据库还是用Mysql比较多的!所以我们需要掌握一些基本的python操作数据库的知识!

1).执行一条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

(代码可以左右滑动)

2).执行sql,获取字段数据

def get_fields(sql):
    # 一个传入sql导出字段的函数
    conn = pms.connect(host='rm-rj91p2yhl9dm2xmbixo.mysql.rds.xx.com', user='bi-analyzer',
                       passwd='xxx', database='xxx', port=3306, charset="utf8")
    cur = conn.cursor()
    cur.execute(sql)
    # 获取所需要的字段名称
    fields = cur.description
    cur.close()
    return fields

(代码可以左右滑动)

03.

数据写入Excel

用Python操作excel其实非常简单,前面我们的入门教程里有详细的讲解(关于Excel表格如何处理|这篇最用心)。用openpyxl建一个excel对象,然后建一个sheet,接着一个循环把一个一个单元格写数据即可!

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

(代码可以左右滑动)

04.

处理日期数据

大部分的数据都是需要时间戳的,用Python操作时间可以用time,datatime这样的模块。里面有大量非常方便的函数。详见我的历史文章(都说Python时间处理很好玩还简单,真的吗)

def getYesterday():
    # 获取昨天日期的字符串格式的函数
    #获取今天的日期
    today = datetime.date.today()
    #获取一天的日期格式数据
    oneday = datetime.timedelta(days=1)
    #昨天等于今天减去一天
    yesterday = today - oneday
    #获取昨天日期的格式化字符串
    yesterdaystr = yesterday.strftime('%Y-%m-%d')
    #返回昨天的字符串
    return yesterdaystr

05.

生成邮件

经过前面的几个步骤,我们的准备工作差不多了!该重头戏自动发送邮件出场了,编写一个发送邮件,无非这么几步:

1).编写邮件内容

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)
    #返回邮件
    return message

(代码可以左右滑动)

用email模块生成邮件的标题,内容,发件人和收件人。如果有附件的话,我们插入附件的文件。

2).发送邮件

准备好邮件的内容之后,我们用smtp模块链接上服务器,填入用户名和密码。当然一定要有异常处理,所以涉及到服务器的处理,都需要有异常处理!

def send_email(sender, password, receiver, msg):
    # 一个输入邮箱、密码、收件人、邮件内容发送邮件的函数
    try:
        #找到你的发送邮箱的服务器地址,已加密的形式发送
        server = smtplib.SMTP_SSL("smtp.mxhichina.com", 465)  # 发件人邮箱中的SMTP服务器
        server.ehlo()
        #登录你的账号
        server.login(sender, password)  # 括号中对应的是发件人邮箱账号、邮箱密码
        #发送邮件
        server.sendmail(sender, receiver, msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号(是一个列表)、邮件内容
        print("邮件发送成功")
        server.quit()  # 关闭连接
    except Exception:
        print(traceback.print_exc())
        print("邮件发送失败")

(代码可以左右滑动)

06.大功告成,看一下效果

忙活了半天,总于可以看一下运行的效果了!输入一条sql查询语句,然后初始化一些邮件的标题,然后填入一堆运营部门,产品部门的邮件地址。然后倒杯咖啡,漂亮的按一下回车,欣赏自己的劳动成果!

def main():
    my_sql = sql = "SELECT a.id '用户ID',\
           a.gmtCreate '用户注册时间',\
           af.lastLoginTime '最后登录时间',\
           af.totalBuyCount '历史付款子单数',\
           af.paidmountUSD '历史付款金额',\
           af.lastPayTime '用户最后支付时间'\
          FROM table a\
      LEFT JOIN tableb af ON a.id= af.accountId ;"
    # 生成数据
    my_data = get_datas(my_sql)
    # 生成字段名称
    my_field = get_fields(my_sql)
    # 得到昨天的日期
    yesterdaystr = getYesterday()
    # 文件名称
    my_file_name = 'user attribute' + yesterdaystr + '.xlsx'
    # 文件路径
    file_path = 'D:/work/report/' + my_file_name
    # 生成excel
    get_excel(my_data, my_field, file_path)

    my_email_from = 'BI部门自动报表机器人'
    my_email_to = '运营部'
    # 邮件标题
    my_email_Subject = 'user' + yesterdaystr
    # 邮件正文
    my_email_text = "Dear all,\n\t附件为每周数据,请查收!\n\nBI团队 "
    #附件地址
    my_annex_path = file_path
    #附件名称
    my_annex_name = my_file_name
    # 生成邮件
    my_msg = create_email(my_email_from, my_email_to, my_email_Subject,
                          my_email_text, my_annex_path, my_annex_name)
    my_sender = '阿里云邮箱'
    my_password = '我的密码'
    my_receiver = [10001@qq.com']#接收人邮箱列表
    # 发送邮件
    send_email(my_sender, my_password, my_receiver, my_msg)

if __name__ == "__main__":
    main();

(代码可以左右滑动)

看一下效果:

说千遍道万遍,不如自己敲一遍,你觉得呢,欢迎留言讨论

近期热门:

8个鲜为人知的Python科学库,用过三个算是高手

火爆全网!这个 Python 项目很骚气!

你必须掌握的20个python代码,短小精悍,用处无穷

Python 最强编辑器详细使用指南!

 点击阅读原文,阅读菜鸟学Python 400篇干货!

Python办公自动化实战:用代码解放Excel、Word、PPT与邮件重复劳动 办公自动化是提升工作效率、减少重复性人工操作的关键技术。其核心原理是通过脚本或程序,将规则明确、流程固定的手动任务转化为自动执行的过程。在技术层面,这通常涉及对特定文件格式(如Excel、Word、PPT)的读写操作、数据处理以及任务调度。对于广大办公人员、财务、行政及数据分析师而言,掌握基础的办公自动化技能,能够将精力从繁琐的复制粘贴、格式调整、数据汇总中释放出来,聚焦于更有价值的分析与决策工作。Python因其简洁的语法和丰富的生态库(如pandas, openpyxl),成为实现办公自动化的热门选择。 阅读详情

相关推荐

【Python 实战】---- 实现批量发送邮件,通过读取 excel 中的发送内容

在生活中,我们经常遇到的事情就是邮箱收到自己的工资条。你想一个公司如果只有几个人,那么还好说,但是如果上了十个以上,对于大多数人来说,这就是一件比较麻烦的事情。重复的劳动需要重复几十次几百次几千次,这样的事情对于一个程序员来,是不是很 low?那么人事的小姐姐,就需要我们给他开发一个自动化脚本,它只需要将发送的邮箱和内容写在一个 excel 的表格中,通过表格读取内容,然后自动发送到对应的邮箱中,是不是很简单?

止于至善 610

使用Python生成自动报表(Excel)以邮件发送

数据分析师肯定每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的、产品的等等。而且大部分报表都是重复性的工作,这篇文章就是帮助大家如何用Python来实现报表的自动发送,解放你的劳动力,可以让你有时间去做更有意思的事情。 首先来介绍下实现自动报表要使用到的Python库: ·pymysql 一个可以连接MySQL实例并且实现增删改查功能的库 ·datetime Python标准库中自...

python学习者的博客 8797

USB接口ESD防护设计实战:从金属外壳到信号线的完整避坑指南

本文深入探讨USB接口ESD防护设计的实战要点,聚焦金属外壳作为ESD能量泄放关键通道的处理策略。文章详细解析了从外壳接地路径控制、信号线TVS管选型与布局,到PCB分区及电源线滤波等完整设计流程,旨在帮助硬件工程师构建系统级防护,避免常见设计误区,确保产品通过严苛的静电测试。

k8l9m0n的博客 481

【python办公自动化--自动发送邮件】163,QQ邮箱为例

在公司干活,经常会有这样的场景,领导会每日、每周、每月、隔一段时间、突然就让你统计xx功能、xx页面、xx模块的数据出到Excel表格里,并发送邮件抄送相关人员。换个思路,能不能用代码把这个功能写成自动化,一劳永逸?excel表格文件都可以通过之前写的几篇文章通过爬虫获取数据保存自动保存到本地。直接结合这个代码,不需要人工再去进行重复性操作了1.登录163邮箱,选择POP3/SMTP/IMAP2.进入设置页面,开启对应功能,获取到授权密码及发送邮箱服务器网址。

weixin_42665577的博客 1744

Antlr4入门(二)基本概念解析

在上一章中(Antlr4入门(一)IDEA中Antlr的安装与使用),我们安装了Antlr,并编写运行了第一个程序“Hello world”。而在本章中,我们将学习语言类应用程序相关的重要过程、术语和数据结构。 一. 术语 语言(language)是由一系列有意义的语句组成,语句(sentence)由词组组成,词组(phrase)是由更小的子词组(subphrase)和词汇符号(vocabulary symbols)组成。 举个例子,英语就是一种语言,“Keep on going never gi.

qq_37771475的博客 5207

【深度排查】VScode 远程 SSH 连接失败:从网络握手到服务部署的全链路诊断指南

本文详细解析了VScode远程SSH连接失败的常见原因及解决方案,从基础网络排查到SSH服务配置,再到VScode特有的问题处理。特别针对Ubuntu和TrueNAS系统提供了具体配置建议,帮助开发者快速解决'Could not establish connection'等连接问题,提升远程开发效率。

weixin_30301449的博客 445

python发送excel表格的邮件,python发送电子邮件

每次生成报表后,根据报表发送频率类型计算下次生成报表的时间,然后每天只处理报表配置表中下次生成报表时间为当天的报表。PROC_BEGIN_TIME:报表生成时间段开始时间,格式:hh24:mi,例如需要每天7:00后才发送邮件,这里就填07:00。本邮件为自动发送,如有疑问,请与×××联系。NEXT_EXEC_TIME_RULE:下一次运行时间(针对发送频率为按规则发送的报表)

2301_81900439的博客 1443

zynq+ad9361 petalinux使用官方IIO示波器调试记录

1ad9361 iio示波器

Yetob的博客 7991

通过Python实现生成excel并邮件发送的功能

工作虽然简单,但是还是需要花费大家的时间和经历,所以,通过一份简单的python代码来实现此功能。## 定义title的坐标:row=0,col=0~字段总数 也就是excel的第一行:0,0 ~ 0,len(fields),通过fields[field][0] 获取字段名。## 定义title的坐标:row=0,col=0~字段总数 也就是excel的第一行:0,0 ~ 0,len(fields),通过fields[field][0] 获取字段名。# 查询数据结果和字段名字 赋值给两个变量。

hongjian006的博客 1298

Win10+pycharm+conda 配置Siammask 过程记录(新手向)

我们跑动demo 需要配置两个相关的文件这两个文件需要用 git 进行下载,对于不熟悉git的小伙伴 我这里给出连接,大家可以直接下载即可,并将其配置在 experiments文件夹下然后大家再需要在设置参数参数这里给出了。

C1137577723的博客 550

微信小程序视频内容服务类目审核不过?绕过审核的两种思路!

虽然不推荐绕过官方审核,但在实际项目中,总有一些特殊情况:比如,最近开发的小程序涉及视频播放,提交审核时,被官方要求补充“教育服务 - 在线视频课程”类目。但我们的内容只是车辆使用介绍,并非教育课程,无法提供相应资质。该怎么办?很多开发者发现,小程序开发不是最难的,审核才是最难的。 微信为了规避法律风险,要求某些功能必须提供资质。例如:然而,并不是所有公司都能轻松申请到这些资质,甚至有些资质根本不适用于我们的业务,导致审核卡住,无法上线。就像我遇到的这个问题,官方要求我们补充“在线视频课程”类目,但实际业务

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3238

Java实现发送邮件(定时自动发送邮件)

在我们做项目时,有些需求需要通知其他人。比如在手机号获取验证码登录时,会发送短信给该用户去接收验证码从而进行身份确认进行安全登录。但有些时候是需要进行群发消息通知用户的,这个过程肯定不是认为的去发送,所以我们就用java来实现通知用户的邮件发送功能。 至于为什么要发送QQ邮件通知用户,而不是使用短信等方式?想必对这方面有些了解的就知道短信服务是要开通服务的,就是需要交钱的(这个钱是根据具体发送短信的条数算的),这里对于收钱的我们就不演示了。都这么说了,大家肯定猜到了QQ邮件是免费的!没错啊,你没有听

心态的博客 5591

A*寻路算法的最简单通俗讲解

为什么我的眼里常含泪水?因为我有一个算法不会。为了节约点眼泪,今天我们就来介绍著名的A*寻路算法(或简称A*算法)。 Peter Hart, Nils Nilsson 和 Bertram Raphael 在1968年首次提出了著名的A*算法。A*算法其实是Dijkstra最短路径算法的一种扩展。不一样的是,在A*算法中我们需要使用Heuristics 来导引搜索过程,以期达到更好的表现。 ...

白马负金羁 2万+

还在做重复的劳动,不如用Python自动生成Excel以邮件发送_python mail excel

(代码可以左右滑动)

2401_83620690的博客 1128

ARM系统控制和管理接口System Control and Management Interface

本文档描述了一个可扩展的独立于操作系统的软件接口,用于执行各种系统控制和管理任务,包括电源和性能管理。 本文档描述了系统控制和管理接口(SCMI),它是一组操作系统无关的软件接口,用于系统管理。

AI-安全-功耗 1912

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

还在做重复的劳动,不如用Python自动生成Excel以邮件发送_python mail excel(1)

在学习python中有任何困难不懂的可以扫码微信扫描下方优快云官方认证二维码免费领取【保证100%免费】。多多交流问题,互帮互助,这里有不错的学习教程和开发工具。

2401_84140332的博客 875

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python自动生成Excel以邮件发送

还在做重复的劳动,不如用Python自动生成Excel以邮件发送   数据分析师小王每天都要被各种各样的数据数据报表搞得焦头烂额,比如老板的,运营的、产品的等等。而且大部分报表都是重复性的工作。这篇文章就是帮助大家如何用Python来实现报表的自动发送,解放你的劳动力,可以让你有时间去做更有意思的事情。 要点: ·pymysql 一个可以连接MySQL实例并且实现增删改查功能的库 ·da...

正在起名中。。。。。 1089

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用Python自动生成报表以邮件发送

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者:碧茂大数据 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 http://t.cn/A6Zvjdun 数据分析师肯定每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的、产品的等等。而且大部分报表都是重复性的工作,这篇文章就是帮助大家如何用Python来实现报表的自动发送,解放你的劳动力,可以让你有时间去做更有意思的事情。 首先来介绍下实现自动报表要

人生苦短, 还不用Python? 2243

Python 生成自动报表(Excel)以邮件附件发送excel 文件

我作为一个入门的数据分析师,需要学习很多基本功,现转载这篇博文,在此感谢作者:王向君 原文地址:https://zhuanlan.zhihu.com/p/41670796 数据分析师肯定每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的、产品的等等。而且大部分报表都是重复性的工作,这篇文章就是帮助大家如何用Python来实现报表的自动发送,解放你的劳动力,可以让你有时间去做更有意...

liumoude6的博客 5533

自动化办公——使用Python生成自动报表(Excel)以邮件发送

使用Python生成自动报表(Excel)以邮件发送 数据分析师肯定每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的、产品的等等。而且大部分报表都是重复性的工作,这篇文章就是帮助大家如何用Python来实现报表的自动发送,解放你的劳动力,可以让你有时间去做更有意思的事情。 首先来介绍下实现自动报表要使用到的Python库: **·**pymysql 一个可以连接MySQL实例并且实现增删改查功能的库 **·**datetime Python标准库中自带的关于时间的库 **·**openpyxl 一

m0_59235508的博客 2340

python开发web报表_如何使用Python自动生成报表并以邮件发送

数据分析师肯定每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的、产品的等等。而且大部分报表都是重复性的工作,这篇文章就是帮助大家如何用Python来实现报表的自动发送,解放你的劳动力,可以让你有时间去做更有意思的事情。首先来介绍下实现自动报表要使用到的Python库:pymysql 一个可以连接mysql实例并且实现增删改查功能的库datetime Python标准库中自带的关于时间的库...

weixin_39583751的博客 692
上一篇: 手把手教你50行Python代码,给心目中的女友微博秒评论
下一篇: 这是一个适合深度学习初学者的一个工具,2个小时立即开挂!
菜鸟学Python
博客等级 码龄9年 8029粉丝 571原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值