Python | 正規表現(re)

Python
スポンサーリンク

では 複数のテキストファイルからメール・電話・日付を抽出して、結果をCSVに出力する実務向けスクリプト を作ります。

  • フォルダ内のすべての .txt ファイルを対象
  • 正規表現で抽出(メール・電話・日付)
  • CSV に整理して出力(1行1件 or 複数件まとめて)
  • 初心者向けにコメントつき
# =============================================
# 実務向け:複数テキストからメール・電話・日付を抽出しCSV出力
# =============================================
import re
import os
import csv

# -----------------------------
# 1. 抽出するパターン(正規表現)
# -----------------------------
email_pattern = r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}"
phone_pattern = r"\b0\d{1,4}-\d{1,4}-\d{4}\b"
date_pattern  = r"\b\d{4}-\d{2}-\d{2}\b"

# -----------------------------
# 2. 対象フォルダと出力ファイル
# -----------------------------
input_folder = "./texts"   # テキストファイルが入っているフォルダ
output_csv   = "extracted_data.csv"

# -----------------------------
# 3. ファイルを読み込み抽出
# -----------------------------
results = []  # CSVに書き込むリスト

for filename in os.listdir(input_folder):
    if filename.endswith(".txt"):
        file_path = os.path.join(input_folder, filename)
        with open(file_path, "r", encoding="utf-8") as f:
            text = f.read()
        
        emails = re.findall(email_pattern, text)
        phones = re.findall(phone_pattern, text)
        dates  = re.findall(date_pattern, text)

        # ファイル名と抽出結果をまとめる
        results.append({
            "ファイル名": filename,
            "メール": ",".join(emails),
            "電話": ",".join(phones),
            "日付": ",".join(dates)
        })

# -----------------------------
# 4. CSV に出力
# -----------------------------
fieldnames = ["ファイル名", "メール", "電話", "日付"]

with open(output_csv, "w", newline="", encoding="utf-8") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for row in results:
        writer.writerow(row)

print(f"抽出結果を {output_csv} に出力しました。")
Python

このスクリプトの特徴

  1. フォルダ内の .txt ファイルを自動で処理
  2. メール・電話・日付を正規表現で抽出
  3. CSV に整理(カンマ区切りで複数件も1セルにまとめて出力)
  4. ファイル名も記録するのでどのファイルにあったか分かる
  5. 初心者でも理解しやすいコメントつき

💡 応用アイデア

  • 複数フォルダ対応os.walk() を使ってサブフォルダも処理
  • 抽出条件の追加:郵便番号、URL、ID番号なども追加
  • ユニーク化:重複を削除してCSVに書き込む
  • 改良版:抽出件数ごとに1行ずつ出力して分析しやすくする
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました