首頁 > 軟體

python讀取eml檔案並用正規表示式匹配郵箱的程式碼

2022-11-09 14:02:00

今天接到一個需求有一個同事離職了,但是留下了非常多(2W多封)的郵件,我需要將他的郵件進行分類,只要郵件中以@xxx.com結尾的存放在資料夾中(下圖名叫【是】的資料夾),否則放在另一個資料夾中(下圖名叫【否】的資料夾)。 目錄結構

程式碼注意事項

import email(我發現是內建模組,不用安裝) 下面是注意事項(就當是註釋吧!!!!) 1、提取包含一下字尾的郵箱,我用了split(“@”),所以不用寫 @

e_a = [‘Honeywell.com’, ‘honeywell.com’, ‘garrettmotion.com’, ‘HONEYWELL.COM’, ‘resideo.com’]

2、提取,收件人、發件人、抄送人的郵箱(這個是可以不寫的,但是我這個程式碼是借鑑的,沒找到提取全部內容的函數,只找到提取內容的函數,所以加上了下面的程式碼)

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(“發件人”, fjr)
print(“收件人”, sjr)
print(“抄送人”, csr)

3、將eml檔案內容與收件人、發件人、抄送人拼接,並且加 " " 間隔,不加會有些小問題

text = text + " " + fjr + " " + " " + " " + " " + sjr + " " + " " + csr

4、正則匹配郵箱

prog = re.compile(r’[a-zA-Z0-9_.±]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+')
res = prog.findall(text)

5、移動檔案 os.remove()

完整程式碼

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("./資料來源/"):
    # print(f)
    text = ""
    with open("./資料來源/" + 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("發件人", 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 = "./資料來源/" + f
            now = "./是/" + f
            os.rename(ori, now)
            break
    else:
        ori = "./資料來源/" + f
        now = "./否/" + f
        os.rename(ori, now)
        print(f, "不在")

下面看看python正規表示式匹配郵箱

下面來看看python驗證郵箱模式的例子。

(首先還是把環境列出來)

環境:python 2.7.10

1. 一次匹配多個郵箱的情況

下面的例子中:郵箱中可以出現 數位、大小寫字母、下劃線、和橫線(-)

# -*- coding:utf-8 -*-
# 郵箱格式-正規表示式匹配
 
import re
 
# 一次匹配多個郵箱
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

結果輸出:

2. 一次匹配一個

這種情況,常見在登入介面使用者名稱為郵箱時, 此時一個字串只有一個 郵箱

# 只匹配一個
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

結果輸出:

到此這篇關於python讀取eml檔案並用正則匹配郵箱的文章就介紹到這了,更多相關python讀取eml檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com