溫馨提示×

溫馨提示×

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

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

Python怎么實(shí)現(xiàn)Excel拆分并自動發(fā)郵件

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

本篇內(nèi)容介紹了“Python怎么實(shí)現(xiàn)Excel拆分并自動發(fā)郵件”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

需求

需要向大約 500 名用戶發(fā)送帶有 Excel 附件的電子郵件,同時必須按用戶從主 Excel 文件中拆分?jǐn)?shù)據(jù)以創(chuàng)建他們自己的特定文件,然后將該文件通過電子郵件發(fā)送給正確的用戶

需求解析

Python怎么實(shí)現(xiàn)Excel拆分并自動發(fā)郵件

大致的流程就是上圖,先拆分 Excel 數(shù)據(jù),提取出對應(yīng)的郵件地址和用戶的數(shù)據(jù)信息,再自動添加到郵件的附件當(dāng)中

代碼實(shí)現(xiàn)

首先我們先來看下我們手中 Excel 的數(shù)據(jù)形式是怎么樣的。

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怎么實(shí)現(xiàn)Excel拆分并自動發(fā)郵件

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

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

我們再來看下用戶 A1005 所對應(yīng)的數(shù)據(jù)形式。

Python怎么實(shí)現(xiàn)Excel拆分并自動發(fā)郵件

接下來我們就為每一個用戶創(chuàng)建一個 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 所包含的數(shù)據(jù)吧。

[('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怎么實(shí)現(xiàn)Excel拆分并自動發(fā)郵件

我們已經(jīng)收集了客戶名單、他們的電子郵件和附件,現(xiàn)在我們就可以用 Outlook 發(fā)送一封電子郵件了。

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,關(guān)于這個庫的具體使用,我們在下次的文章中再具體說明吧。

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

Python怎么實(shí)現(xiàn)Excel拆分并自動發(fā)郵件

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

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

“Python怎么實(shí)現(xiàn)Excel拆分并自動發(fā)郵件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI