python讀取eml文件并用正則表達(dá)式匹配郵箱的代碼
今天接到一個(gè)需求有一個(gè)同事離職了,但是留下了非常多(2W多封)的郵件,我需要將他的郵件進(jìn)行分類,只要郵件中以@xxx.com結(jié)尾的存放在文件夾中(下圖名叫【是】的文件夾),否則放在另一個(gè)文件夾中(下圖名叫【否】的文件夾)。 目錄結(jié)構(gòu)

代碼注意事項(xiàng)
import email(我發(fā)現(xiàn)是內(nèi)置模塊,不用安裝) 下面是注意事項(xiàng)(就當(dāng)是注釋吧!?。。? 1、提取包含一下后綴的郵箱,我用了split(“@”),所以不用寫 @e_a = [‘Honeywell.com’, ‘honeywell.com’, ‘garrettmotion.com’, ‘HONEYWELL.COM’, ‘resideo.com’]
2、提取,收件人、發(fā)件人、抄送人的郵箱(這個(gè)是可以不寫的,但是我這個(gè)代碼是借鑒的,沒找到提取全部內(nèi)容的函數(shù),只找到提取內(nèi)容的函數(shù),所以加上了下面的代碼)fjr = email.utils.parseaddr(msg.get(“from”))[1]
3、將eml文件內(nèi)容與收件人、發(fā)件人、抄送人拼接,并且加 " " 間隔,不加會(huì)有些小問題
sjr = email.utils.parseaddr(msg.get(‘to’))[1]
csr = email.utils.parseaddr(msg.get(‘cc’))[1]
print(“發(fā)件人”, fjr)
print(“收件人”, sjr)
print(“抄送人”, csr)text = text + " " + fjr + " " + " " + " " + " " + sjr + " " + " " + csr
4、正則匹配郵箱prog = re.compile(r’[a-zA-Z0-9_.±]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+')
5、移動(dòng)文件 os.remove()
res = prog.findall(text)
完整代碼
import email
import os
import re
from email import policy
from email.parser import BytesParser
e_a = ['Honeywell.com', 'honeywell.com', 'garrettmotion.com', 'HONEYWELL.COM', 'resideo.com']
for f in os.listdir("./數(shù)據(jù)源/"):
# print(f)
text = ""
with open("./數(shù)據(jù)源/" + f, 'rb') as fp:
msg = BytesParser(policy=policy.default).parse(fp)
fjr = email.utils.parseaddr(msg.get("from"))[1]
sjr = email.utils.parseaddr(msg.get('to'))[1]
csr = email.utils.parseaddr(msg.get('cc'))[1]
print("發(fā)件人", fjr)
print("收件人", sjr)
print("抄送人", csr)
if msg.get_body(preferencelist=('plain'))==None:
text = text + " " + fjr + " " + " " + " " + " " + sjr + " " + " " + csr
else:
text = msg.get_body(preferencelist=('plain')).get_content()
text = text + " " + fjr + " " + " " + " " + " " + sjr + " " + " " + csr
# print(text)
prog = re.compile(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+')
res = prog.findall(text)
for e in res:
res1 = e.split("@")[1]
if res1 in e_a:
print(f, "在")
ori = "./數(shù)據(jù)源/" + f
now = "./是/" + f
os.rename(ori, now)
break
else:
ori = "./數(shù)據(jù)源/" + f
now = "./否/" + f
os.rename(ori, now)
print(f, "不在")下面看看python正則表達(dá)式匹配郵箱
下面來看看python驗(yàn)證郵箱模式的例子。
(首先還是把環(huán)境列出來)
環(huán)境:python 2.7.10
1. 一次匹配多個(gè)郵箱的情況
下面的例子中:郵箱中可以出現(xiàn) 數(shù)字、大小寫字母、下劃線、和橫線(-)
# -*- coding:utf-8 -*-
# 郵箱格式-正則表達(dá)式匹配
import re
# 一次匹配多個(gè)郵箱
str1 = 'aaf ssa@ss.net asdf asdb@163.com.cn asdf ss-a@ss.net asdf asdd.cba@163.com afdsaf'
reg_str1 = r'([\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+)'
mod = re.compile(reg_str1)
items = mod.findall(str1)
for item in items:
print item結(jié)果輸出:

2. 一次匹配一個(gè)
這種情況,常見在登錄界面用戶名為郵箱時(shí), 此時(shí)一個(gè)字符串只有一個(gè) 郵箱
# 只匹配一個(gè)
str2 = 'ssa_a-c@ss.net.cn'
reg_str2 = r'(^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$)'
mod = re.compile(reg_str2)
items = mod.findall(str2)
for item in items:
print item結(jié)果輸出:

到此這篇關(guān)于python讀取eml文件并用正則匹配郵箱的文章就介紹到這了,更多相關(guān)python讀取eml文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Python實(shí)現(xiàn)一個(gè)簡單的Web匯率計(jì)算器
Dash?是一個(gè)用于構(gòu)建基于?Web?的應(yīng)用程序的?Python?庫,無需?JavaScript?。本文將利用Dash編寫一個(gè)簡單的Web匯率計(jì)算器,感興趣的可以了解一下2022-08-08
20個(gè)被低估的Python性能優(yōu)化技巧分享
這篇文章主要為大家詳細(xì)介紹了20個(gè)被低估的Python性能優(yōu)化技巧并附上了實(shí)測數(shù)據(jù),文中的示例代碼簡潔易懂,有需要的小伙伴可以參考一下2025-03-03
python四種出行路線規(guī)劃的實(shí)現(xiàn)
路徑規(guī)劃中包括步行、公交、駕車、騎行等不同方式,今天借助高德地圖web服務(wù)api,實(shí)現(xiàn)出行路線規(guī)劃。感興趣的可以了解下2021-06-06
Python-apply(lambda x: )的使用及說明
這篇文章主要介紹了Python-apply(lambda x: )的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Python數(shù)據(jù)分析模塊pandas用法詳解
這篇文章主要介紹了Python數(shù)據(jù)分析模塊pandas用法,結(jié)合實(shí)例形式詳細(xì)分析了Python數(shù)據(jù)分析模塊pandas的功能、常見用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-09-09
pytorch 實(shí)現(xiàn)計(jì)算 kl散度 F.kl_div()
這篇文章主要介紹了pytorch 實(shí)現(xiàn)計(jì)算 kl散度 F.kl_div(),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05

