📘

メールアドレスのリストのクリーニングに使えるコード

2024/03/26に公開

メール配信で使うメールアドレスのリストを、クリーニングする仕事の依頼を受けました。
それで、簡易のクリーニングができるプログラムを作ってみました。

尚私が自分で使うために作ったので、エラー処理、ファイル選択のキャンセル処理などは、ありません。
各自必要に応じて、作成してください。

クリーニング内容

  1. 重複しているメールアドレス
  2. タイプミスのようなドメイン名
  3. 特定のメールアドレスの@の前の部分

Pythonの仮想環境で使います

Pythonの仮想環境で、使います。
下記のrequirements.txtの内容で、仮想環境にインストールするものは再構築できます。

私は、WLSの環境で、Ubuntu22.04を使って作りました。

contourpy==1.2.0
cycler==0.12.1
et-xmlfile==1.1.0
fonttools==4.50.0
kiwisolver==1.4.5
matplotlib==3.8.3
numpy==1.26.4
openpyxl==3.1.2
packaging==24.0
pandas==2.2.1
pillow==10.2.0
pyparsing==3.1.2
python-dateutil==2.9.0.post0
pytz==2024.1
six==1.16.0
tzdata==2024.1

プログラムの本体

import pandas as pd
import re
import tkinter as tk
from tkinter import filedialog, font

import os


# GUIウィンドウの初期化
# 文字エンコーディングを指定
root = tk.Tk()
root.withdraw()  # 小さなウィンドウを表示しないようにする


# デフォルトフォントの設定
default_font = font.nametofont("TkDefaultFont")
default_font.config(family="IPA Pゴシック")  # ここで好きな日本語フォントに設定


# ファイル選択ダイアログの表示
file_path = filedialog.askopenfilename(
    title='Excel Flie',
    filetypes=[('Excelファイル', '*.xlsx'), ('すべてのファイル', '*.*')]
)

# Excelファイルを読み込む
df = pd.DataFrame()  # 空のDataFrameを初期化

# ファイルが選択されたらExcelファイルを読み込む
if file_path:
    df = pd.read_excel(file_path)
    print(df)

# GUIを実行
#root.mainloop()


# 'Email'列にあるメールアドレスの重複を削除する
df = df.drop_duplicates(subset='Email')

# スパムトラップと思われるドメインパターンを定義する
# これは非常に基本的なものです。より複雑なパターンには、正規表現を調整する必要があります。
invalid_domains = [
    r'@\w*gma[ij]l\.com',
    r'@gma[ij]l\.com',
    r'@\w*google\.com',
    r'@yah?o\.co\.jp',
    r'@i\.softbank\.jp',
    r'@icloud\.com',
    # 他の不正なドメインも同様に追加していく
]

# 不正なドメインを含むメールアドレスを削除する
for domain in invalid_domains:
    df = df[~df['Email'].str.contains(domain, flags=re.IGNORECASE, regex=True)]

# 'info@'や'support@'で始まるメールアドレスを削除する
df = df[~df['Email'].str.startswith(('info@', 'support@','mail@','no-reply@'))]


# 入力ファイルのディレクトリを取得
input_dir = os.path.dirname(file_path)

# 出力ファイル名を設定
output_file = f'cleaned_{os.path.basename(file_path)}'

# クリーニングしたデータを新しいExcelファイルに保存する
df.to_excel(os.path.join(input_dir, output_file), index=False)

# 保存完了メッセージを表示
print('出力ファイル ' + output_file + ' を保存しました。')

仮想環境の再構築

下記のコードを実行してください。

#仮想環境を作る myenvは適宜書き換えてください。
python -m venv myenv

#仮想環境のアクティベート(有効化)
.\myenv\Scripts\activate

#インストールされているモジュールのインストール
#上記の内容を予め保存して、ファイルを作ってください。
pip install -r requirements.txt

#上記のプログラムのコードを任意のファイル名で、保存してください。

使い方

Excelのファイルを使います。
見出しは、Emailになっています。
ここは、適宜使われるリストに合わせて、プログラムのコードを書き替えて合わせてください。

Excelのファイルを選択できるダイアログが、表示されます。
ファイルを選択すると、コンソールに読み取ったリストの内容が前後の一部表示されます。

クリーニングされると”cleaned_hoge”のような形で、接頭語で”cleaned_”が付きます。
入力されたファイルと同じディレクトリに、出力されます。

免責事項

このプログラムを実行して何か損害が生じても、責任を負うことはできません。
自己責任で、使用してください。

Discussion