では 抽出件数ごとに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行:メール・電話・日付が複数あっても、CSVで1行ずつ分かれて見やすい
タイプ列を追加:メール/電話/日付の種類が分かる- 分析・フィルタリングしやすい:Excel や pandas で扱いやすい
- 重複削除も可能:必要なら
set()を使う
💡 応用例
pandasと組み合わせて集計やフィルタリングが簡単- 条件付きで出力(例:電話だけ抽出、特定ドメインのメールだけ抽出)
- ファイルごとの件数集計レポートを自動生成
