需求
需要向大约 500 名用户发送带有 excel 附件的电子邮件,同时必须按用户从主 excel 文件中拆分数据以创建他们自己的特定文件,然后将该文件通过电子邮件发送给正确的用户
需求解析
大致的流程就是上图,先拆分 excel 数据,提取出对应的邮件地址和用户的数据信息,再自动添加到邮件的附件当中
代码实现
首先我们先来看下我们手中 excel 的数据形式是怎么样的
import datetime import os import shutil from pathlib import path import pandas as pd src_file = path.cwd() / 'data' / 'example4.xlsx' df = pd.read_excel(src_file) df.head()
可以看出,customer_id 就是那个唯一的用户 id,下面我们以该字段来分组,得到如下数据
customer_group = df.groupby('customer_id') for id, group_df in customer_group: print(id) >>>output>>> a1000 a1001 a1002 a1005 ...
我们再来看下用户 a1005 所对应的数据形式
接下来我们就为每一个用户创建一个 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 如下
我们已经收集了客户名单、他们的电子邮件和附件,现在我们就可以用 outlook 发送一封电子邮件了
import win32com.client as win32 today_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_address mail.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'])
最后,我们再把所有生成的 excel 存档,以备后面审查、比对等
archive_dir = path.cwd() / 'archive' for f in attachments: shutil.move(f[1], archive_dir)
至此,我们的编码结束,整体来看还是比较简单的
到此这篇关于python自动化办公之excel拆分与自动发邮件的文章就介绍到这了,更多相关python自动化办公内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!
需要了解更多python教程分享Python自动化办公之Excel拆分与自动发邮件,都可以关注python教程分享栏目—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/pythontutorial/1068099.html