专栏首页凹凸玩数据教你用Python拆分表格并发送邮件

教你用Python拆分表格并发送邮件

大家好,我是11haoren。

周末看了「凹凸玩数据」交流群内Huang Supreme的分享,有一篇写到了日常拆表操作挺有意思的。

决定举一反三一下,ta拆成sheet,那我就拆成工作簿,如果能拆完直接发邮件给不同的人就更有意思了。

照葫芦画个瓢。


本人在huang的文末一张表拆成多个sheet的基础上,修改了代码,可实现一表拆成多个工作簿。

因为平时经常要拆成工作簿,拆完还要发给不同的对象,工作又使用outlook发邮件,所以本文调用outlook账号进行邮件的发送作为示例,如果想调用其他邮箱可参见文末参考链接,你也可以举一反三。

01

一表拆成多个表

展示一下‘葫芦’。

huang的拆表代码是我能找到的最简洁的了,ta首先用 ExcelWriter 生成一个拆完表后的容纳工作簿,然后调用了 For 循环对某一列进行遍历,area_list 取自表格的某一列,这一列有多少种因子,就拆成多少个表,例如北京、深圳等等。

最后通过循环每一个因子生成一个表,写入之前建好的工作簿中直至循环结束。

小提示:python对空格敏感,不信你把writer.save和上一行对齐看看效果是什么样的。

(大表)

(拆分表)

import pandas as pd
import xlsxwriter
import xlrd
data = pd.read_excel(r"C:\Users\PycharmProjects\拆分自动邮件发送\chaifen.xlsx", encoding='gbk')
area_list = list(set(data['店铺']))
writer = pd.ExcelWriter(r"C:\Users\PycharmProjects\拆分自动邮件发送\拆好的表1.xlsx", engine='xlsxwriter')
data.to_excel(writer, sheet_name="总表", index=False)
# 遍历
for j in area_list:
    df = data[data['店铺'] == j]
    df.to_excel(writer, sheet_name=j, index=False)
writer.save()  # 一定要加上这句代码,“拆好的表”才会显示出来     

参考:https://me.csdn.net/weixin_41261833

02

一表拆成多个工作簿

画个‘瓢’。

拆成多个表的关键步骤在于怎么生成表,huang用to_excel(),类比可得,拆成多个工作簿的关键步骤在于怎么生成工作簿,用ExcelWriter(),结合遍历,给每个因子都生成一个工作簿,并写入文件夹就完成了吗?

不,每个工作簿不能重名,因此还需要用变量的方式给文件进行命名,f'能让{}内的功能生效。

发现此处的writer.save和上一个的差别了吗?

data = pd.read_excel(r"C:\Users\PycharmProjects\拆分自动邮件发送\chaifen.xlsx", encoding='gbk')
area_list = list(set(data['店铺']))
# 遍历
for j in area_list:
    df = data[data['店铺'] == j]
    writer = pd.ExcelWriter(f'{str( j )} 拆分自动邮件发送.xlsx', engine='xlsxwriter')# 用变量进行文件名称
    df.to_excel(writer, sheet_name=j, index=False)
    writer.save()    

03

分别发送和抄送给多个人

发'瓢'。

建一个附件和收件人的索引,用之前给文件命名的变量j ,索引到收件人'Rec'列中'店铺'列等于 j的行。

最后构建邮件发送的函数,包括收件人、抄送人、附件、正文等,从拆分到邮件整个过程不超过1分钟。

import pandas as pd
import xlrd
data = pd.read_excel(r"C:\Users\PycharmProjects\拆分自动邮件发送\chaifen.xlsx", encoding='gbk')
data2 = pd.read_excel(r"C:\Users\PycharmProjects\拆分自动邮件发送\邮件人员清单清单.xlsx", converters={'dep2':str, 'Rec':str, 'Cc':str},encoding='gbk')
area_list = list(set(data['店铺']))
# 遍历
for j in area_list:
    df = data[data['店铺'] == j]
    writer = pd.ExcelWriter(f'{str( j )} 拆分自动邮件发送.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name=j, index=False)
    writer.save()  # 一定要加上这句代码,“拆好的表”才会显示出来
for j in area_list:
    def send_mail():
        outlook = win32.Dispatch('Outlook.Application') # 固定写法
        mail_item = outlook.CreateItem(0) # 0: olMailItem
        mail_item.to = list(data2['Rec'][data2['店铺'] == j])[0] #收件人
        mail_item.cc = list(data2['Cc'][data2['店铺'] == j]) [0] #抄送人
        # mail.Recipients.Add(addressee)
        mail_item.Subject = 'Mail Test5'+'you are the best'
        mail_item.BodyFormat = 2          # 2: Html format
        mail_item.HTMLBody  = '''
            <H2>Hello, This is a test mail.</H2>
            Hello Guys. 
            Do you want to come with us?
            '''

        mail_item.Attachments.Add(r'C:\Users\PycharmProjects\拆分自动邮件发送'+f'\{str( j )} 拆分自动邮件发送.xlsx', 1, 1, f'{str( j )} 拆分自动邮件发送.xls')
        mail_item.Send()
    if __name__ == '__main__':
        send_mail()
        print('success')

成功√

参考:https://blog.csdn.net/qq_20417499/article/details/80566265

获取数据:后台回复“邮件01”

作者:11haoren,同时感谢Huang Supreme的分享。

公众号「凹凸玩数据」,有趣的不像个技术号~

End

本文分享自微信公众号 - 凹凸数据(alltodata),作者:11haoren

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我用python破解了同事的加密压缩包!

    zipFile模块式Python自带的模块,提供了对zip 文件的创建,读,写,追加,解压以及列出文件列表的操作

    朱小五
  • 自动化办公 | 批量将Excel中的url链接转成图片

    小五对这个比较感兴趣,所以就要了示例数据找时间尝试做了一下。为啥感兴趣呢?因为前段时间刚帮群友做过一个相反的案例——将Excel中的图片下载到本地。

    朱小五
  • 数据分析 | 9年间各省市平均收入分析

    今天逛kaggle看到一个数据集[1],其中有一部分是一个叫做income的表格文档。虽然最后的数据是2017年,但也值得研究一下。嗯,拿来捋一捋。

    朱小五
  • 2020DevOps状态报告——平台模型:扩展DevOps的新方法

    平台模型是我们在这个领域看到越来越多的方法,它源于负责产品或服务的端到端交付的产品团队的理念。

    陈琦聊测试
  • odd ratio值在关联分析中的含义

    在GWAS分析中,利用卡方检验,费舍尔精确检等方法,通过判断p值是否显著,我们可以分析snp位点与疾病之间是否存在关联,然而这得到的仅仅是一个定性的结论,如果存...

    生信修炼手册
  • 【JS 口袋书】第 5 章:JS 对象生命周期的秘密

    咱们经常听到JS中“一切皆对象”? 有没有问想过这是什么意思? 其它语言也有“一切皆对象”之说,如Python。 但是Python中的对象不仅仅是像JS对象这样...

    前端小智@大迁世界
  • 高危漏洞!黑客可利用sudo获得 root权限

    最近,sudo官网爆出目前sudo工具的一个高危漏洞,漏洞编号为:CVE-2019-18634,黑客可通过工具获得Linux的root权限(root具有Linu...

    民工哥
  • CSV文件

    CSV文件:Comma-Separated Values,中文叫,逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据。该文件是一个字符序列,可以由任意数...

    狼啸风云
  • 一个10年工作经验程序员的成长故事

    很多新手程序员在面对自己的岗位和职业发展的时候,都会希望能得到过来人的指引,帮助自己少走弯路,更快的成长,老九君为小伙伴们整理了一位在互联网公司工作十年的技术专...

    老九君
  • Apache Impala的新多线程模型

    今天,我们将介绍一系列新的博客文章,其中将介绍Apache Impala的最新增强功能,许多是性能改进,例如下面所述的功能,可以更高效地利用所有CPU内核,将性...

    大数据杂货铺

扫码关注云+社区

领取腾讯云代金券