最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python自動化辦公之Excel拆分與自動發(fā)郵件

 更新時間:2022年03月18日 09:17:14   作者:蘿卜大雜燴  
這篇文章主要何大家分享一個真實的自動化辦公案例,即向用戶發(fā)送帶有Excel附件的電子郵件,同時必須按用戶從主Excel文件中拆分數(shù)據(jù)以創(chuàng)建他們自己的特定文件,然后將該文件通過電子郵件發(fā)送給正確的用戶,感興趣的可以了解一下

需求

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

需求解析

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

代碼實現(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()

可以看出,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ù)形式

接下來我們就為每一個用戶創(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 如下

我們已經(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'])

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

archive_dir?=?Path.cwd()?/?'archive'

for?f?in?attachments:
????shutil.move(f[1],?archive_dir)

至此,我們的編碼結(jié)束,整體來看還是比較簡單的

到此這篇關(guān)于Python自動化辦公之Excel拆分與自動發(fā)郵件的文章就介紹到這了,更多相關(guān)Python自動化辦公內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python字符串逆序輸出的實例講解

    Python字符串逆序輸出的實例講解

    今天小編就為大家分享一篇關(guān)于Python字符串逆序輸出的實例講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Python?OpenCV中常用圖片處理函數(shù)小結(jié)

    Python?OpenCV中常用圖片處理函數(shù)小結(jié)

    在計算機視覺和圖像處理領(lǐng)域,OpenCV(Open?Source?Computer?Vision?Library)是一個非常強大和流行的開源庫,本文將介紹一些常用的OpenCV函數(shù),希望對大家有所幫助
    2024-03-03
  • python plt如何保存為emf圖像

    python plt如何保存為emf圖像

    這篇文章主要介紹了python plt如何保存為emf圖像問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 關(guān)于Python中Flask全局異常處理流程詳解

    關(guān)于Python中Flask全局異常處理流程詳解

    Flask是一個基于Python的Web框架,它提供了全局異常處理的機制來捕獲和處理應(yīng)用程序中的異常,本文將詳細介紹Flask的全局異常處理,并提供相應(yīng)的代碼示例,需要的朋友可以參考下
    2023-06-06
  • 淺談pyqt5在QMainWindow中布局的問題

    淺談pyqt5在QMainWindow中布局的問題

    今天小編就為大家分享一篇淺談pyqt5在QMainWindow中布局的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python中使用Boolean操作符做真值測試實例

    Python中使用Boolean操作符做真值測試實例

    這篇文章主要介紹了Python中使用Boolean操作符做真值測試實例,在Python中,任何類型的對象都可以做真值測試,并且保證返回True或者False,需要的朋友可以參考下
    2015-01-01
  • Python入門(六)Python數(shù)據(jù)類型

    Python入門(六)Python數(shù)據(jù)類型

    這篇文章主要介紹了Python入門(六)Python數(shù)據(jù)類型,Python是一門非常強大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • Django2.2配置xadmin的實現(xiàn)

    Django2.2配置xadmin的實現(xiàn)

    這篇文章主要介紹了Django2.2配置xadmin的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • python進階教程之循環(huán)相關(guān)函數(shù)range、enumerate、zip

    python進階教程之循環(huán)相關(guān)函數(shù)range、enumerate、zip

    這篇文章主要介紹了python進階教程之循環(huán)相關(guān)函數(shù)range、enumerate、zip,在使用循環(huán)程序經(jīng)常要配合這些函數(shù)來完成循環(huán),需要的朋友可以參考下
    2014-08-08
  • python redis 批量設(shè)置過期key過程解析

    python redis 批量設(shè)置過期key過程解析

    這篇文章主要介紹了python redis 批量設(shè)置過期key過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11

最新評論

武陟县| 碌曲县| 眉山市| 新郑市| 陆河县| 历史| 闵行区| 正宁县| 罗江县| 延长县| 肃南| 和田县| 湾仔区| 巴里| 潞西市| 岗巴县| 金阳县| 上林县| 镇平县| 修水县| 通河县| 河间市| 互助| 宜昌市| 静安区| 大兴区| 六枝特区| 宁南县| 内丘县| 三原县| 临清市| 广灵县| 德阳市| 东乌| 全州县| 凤翔县| 长治市| 竹山县| 威信县| 玉屏| 明光市|