中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么實現Excel拆分并自動發郵件

發布時間:2023-04-13 15:04:10 來源:億速云 閱讀:98 作者:iii 欄目:編程語言

本篇內容介紹了“Python怎么實現Excel拆分并自動發郵件”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

需求

需要向大約 500 名用戶發送帶有 Excel 附件的電子郵件,同時必須按用戶從主 Excel 文件中拆分數據以創建他們自己的特定文件,然后將該文件通過電子郵件發送給正確的用戶

需求解析

Python怎么實現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()

Python怎么實現Excel拆分并自動發郵件

可以看出,CUSTOMER_ID 就是那個唯一的用戶 ID,下面我們以該字段來分組,得到如下數據。

customer_group = df.groupby('CUSTOMER_ID')
for ID, group_df in customer_group:
print(ID)
>>>Output>>>
A1000
A1001
A1002
A1005
...

我們再來看下用戶 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 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'])

Python怎么實現Excel拆分并自動發郵件

最后,我們再把所有生成的 Excel 存檔,以備后面審查、比對等。

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

“Python怎么實現Excel拆分并自動發郵件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

策勒县| 格尔木市| 双江| 特克斯县| 蓬安县| 南充市| 东乡县| 曲阜市| 永和县| 新和县| 汝阳县| 建始县| 长兴县| 麦盖提县| 铜陵市| 肃宁县| 武夷山市| 诸暨市| 大田县| 潜江市| 高邮市| 松滋市| 澄城县| 任丘市| 高平市| 华安县| 龙口市| 资中县| 凤山县| 万源市| 永城市| 东山县| 五原县| 平顺县| 页游| 和政县| 韶关市| 上饶县| 涟水县| 祥云县| 寿阳县|