91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

怀来县| 双峰县| 桦川县| 台前县| 家居| 仲巴县| 和平县| 舞阳县| 临西县| 循化| 宝应县| 长春市| 锦屏县| 延寿县| 桐梓县| 三江| 松原市| 青阳县| 开远市| 专栏| 台东县| 祁门县| 湖北省| 平阴县| 宜都市| 万年县| 昌乐县| 桂东县| 饶河县| 文安县| 噶尔县| 东源县| 南皮县| 丘北县| 泰宁县| 台北县| 蒙山县| 汾阳市| 黄大仙区| 平乐县| 四子王旗|