では 複数のテキストファイルからメール・電話・日付を抽出して、結果を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このスクリプトの特徴
- フォルダ内の
.txtファイルを自動で処理 - メール・電話・日付を正規表現で抽出
- CSV に整理(カンマ区切りで複数件も1セルにまとめて出力)
- ファイル名も記録するのでどのファイルにあったか分かる
- 初心者でも理解しやすいコメントつき
💡 応用アイデア
- 複数フォルダ対応:
os.walk()を使ってサブフォルダも処理 - 抽出条件の追加:郵便番号、URL、ID番号なども追加
- ユニーク化:重複を削除してCSVに書き込む
- 改良版:抽出件数ごとに1行ずつ出力して分析しやすくする
