Python | 正規表現(re)

Python
スポンサーリンク

では 抽出件数ごとに1行ずつ出力するCSV版 を作ります。これにより、例えば1つのファイルにメールが3件あれば、CSVに3行として出力され、分析やフィルタリングがしやすくなります。

# =============================================
# 実務向け:抽出件数ごとに1行ずつ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. 対象フォルダと出力CSV
# -----------------------------
input_folder = "./texts"      # テキストファイルが入っているフォルダ
output_csv   = "extracted_data_rows.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)

        # 抽出件数ごとに1行ずつ追加
        for e in emails:
            results.append({"ファイル名": filename, "タイプ": "メール", "値": e})
        for p in phones:
            results.append({"ファイル名": filename, "タイプ": "電話", "値": p})
        for d in dates:
            results.append({"ファイル名": filename, "タイプ": "日付", "値": d})

# -----------------------------
# 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. 1件ごとに1行:メール・電話・日付が複数あっても、CSVで1行ずつ分かれて見やすい
  2. タイプ 列を追加:メール/電話/日付の種類が分かる
  3. 分析・フィルタリングしやすい:Excel や pandas で扱いやすい
  4. 重複削除も可能:必要なら set() を使う

💡 応用例

  • pandas と組み合わせて集計やフィルタリングが簡単
  • 条件付きで出力(例:電話だけ抽出、特定ドメインのメールだけ抽出)
  • ファイルごとの件数集計レポートを自動生成
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました