文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python怎么实现Excel拆分并自动发邮件

2023-07-06 02:09

关注

本篇内容介绍了“Python怎么实现Excel拆分并自动发邮件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

需求

需要向大约 500 名用户发送带有 Excel 附件的电子邮件,同时必须按用户从主 Excel 文件中拆分数据以创建他们自己的特定文件,然后将该文件通过电子邮件发送给正确的用户

需求解析

Python怎么实现Excel拆分并自动发邮件

大致的流程就是上图,先拆分 Excel 数据,提取出对应的邮件地址和用户的数据信息,再自动添加到邮件的附件当中

代码实现

首先我们先来看下我们手中 Excel 的数据形式是怎么样的。

import datetimeimport osimport shutilfrom pathlib import Pathimport pandas as pdsrc_file = Path.cwd() / 'data' / 'Example4.xlsx'df = pd.read_excel(src_file)df.head()

Python怎么实现Excel拆分并自动发邮件

可以看出,CUSTOMER_ID 就是那个唯一的用户 ID,下面我们以该字段来分组,得到如下数据。

customer_group = df.groupby('CUSTOMER_ID')for ID, group_df in customer_group:print(ID)>>>Output>>>A1000A1001A1002A1005...

我们再来看下用户 A1005 所对应的数据形式。

Python怎么实现Excel拆分并自动发邮件

接下来我们就为每一个用户创建一个 Excel,后面就可以作为附件使用。

attachment_path = Path.cwd() / 'data' / 'attachments'today_string = datetime.datetime.today().strftime('%m%d%Y_%I%p')attachments = []for ID, group_df in customer_group:attachment = attachment_path / f'{ID}_{today_string}.xlsx'group_df.to_excel(attachment, index=False)attachments.append((ID, str(attachment)))

我们来看下变量 attachments 所包含的数据吧。

[('A1000','c:\Users\luobo\notebooks\2020-10\data\attachments\A1000_01162021_12PM.xlsx'),('A1001','c:\Users\luobo\notebooks\2020-10\data\attachments\A1001_01162021_12PM.xlsx'),('A1002','c:\Users\luobo\notebooks\2020-10\data\attachments\A1002_01162021_12PM.xlsx'),('A1005','c:\Users\luobo\notebooks\2020-10\data\attachments\A1005_01162021_12PM.xlsx')]

最后我们可以通过将 DataFrame 合并在一起来生成带有电子邮件地址的文件列表。

email_merge = pd.merge(df, df2, how='left')combined = email_merge[['CUSTOMER_ID', 'EMAIL', 'FILE']].drop_duplicates()

得到的 DataFrame 如下:

Python怎么实现Excel拆分并自动发邮件

我们已经收集了客户名单、他们的电子邮件和附件,现在我们就可以用 Outlook 发送一封电子邮件了。

import win32com.client as win32today_string2 = datetime.datetime.today().strftime('%b %d, %Y')class EmailsSender:def __init__(self):self.outlook = win32.Dispatch('outlook.application')def send_email(self, to_email_address, attachment_path):mail = self.outlook.CreateItem(0)mail.To = to_email_addressmail.Subject = today_string2 + ' Report'mail.Body = """Please find today's report attached."""mail.Attachments.Add(Source=attachment_path)# Use this to show the email#mail.Display(True)# Uncomment to send#mail.Send()

通过上面这个简单的类,我们可以生成电子邮件并附加 Excel 文件。

同时我们还注意到,这里使用了 win32,关于这个库的具体使用,我们在下次的文章中再具体说明吧。

email_sender = EmailsSender()for index, row in combined.iterrows():email_sender.send_email(row['EMAIL'], row['FILE'])

Python怎么实现Excel拆分并自动发邮件

最后,我们再把所有生成的 Excel 存档,以备后面审查、比对等。

archive_dir = Path.cwd() / 'archive'for f in attachments:shutil.move(f[1], archive_dir)

“Python怎么实现Excel拆分并自动发邮件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯