python Dimoraデータ整理 2026-09-10-1
# python
# Dimora
# DIGA
# ONLINE Backup
にゃあw 3部作・・・
# ==============================
# ==== Dimoraデータ
# ==== TSV replace CSV
# ==== 【Gemini】様
# ==== 2026/09/01 08:38:51
# ==========================================================
# 1. ライブラリの読み込み(一番上におく!)
# ==========================================================
import os
import re
# ==========================================================
# 2. 設定値・定数(大文字で書くのがPythonの慣習)
# ==========================================================
INPUT_FILE = "recList-2026.tsv"
OUTPUT_FILE = "UTF-RecList-Replace済.csv"
USB_SELECT = "USB-2"
# ==========================================================
# 3. カレントディレクトリの変更 ★絶対死守★
# ==========================================================
script_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_dir)
print(f"Current directory: {os.getcwd()}")
# ==========================================================
# 処理対象ファイルの読み込み
# ==========================================================
# input_file = "recList-2026.tsv"
# output_file = "UTF-RecList-Replace済.csv"
with open(INPUT_FILE, "r", encoding="UTF-8") as f:
s = f.read()
# ==========================================================
# 前処理 (TSV -> CSV 変換準備 & openpyxlバグ回避)
# ==========================================================
s = s.replace(",", ",") # 本文内の半角カンマを全角に退避
s = s.replace("\t", ",") # TSVのタブをカンマに変換
s = s.replace("0:00", "0:01") # 時間のバグ回避
# 連続する不要なカンマの削除
while ",," in s:
s = s.replace(",,", ",")
# ==========================================================
# 正規表現によるチャンネル表記・文字化け(?記号)の一括変換
# ==========================================================
# ① 地デジ・地上D・BS・CSの「?」や「_」を半角スペースに統一(例: CS2?345 -> CS2 345, BS_103 -> BS 103)
s = re.sub(r'(地上D|地デジ|BS|CS1|CS2)[?_](\d+)', r'\1 \2', s)
# ② 「地上D 011」や「地デジ 011」などをすべて「地D 011」表記に統一
s = re.sub(r'(地上D|地デジ) (\d+)', r'地D \2', s)
# ==========================================================
# 個別文字列置換ルール一覧
# ==========================================================
replace_dict = {
# 状態・ヘッダー項目
"機器名称": "DMR-",
"視聴/未視聴": "視聴",
"視聴済": "済",
"視聴済み": "視聴済",
"未視聴": "未",
"放送局名": "放送局名称",
"ジャンル": "ジャンル",
"録画モード": "MODE",
"録画時間 (分)": "分",
"タイトル": "番組タイトル_番組タイトル",
# 機種・機器情報
"DMR-2W101": "2W101",
"DMR-BRZ1020": "BRZ1020",
"内蔵HDD": "本体",
# "USB-HDD": "USB-1",
"USB-HDD": (USB_SELECT),
# 番組情報表記
"<スタンダードサイズ>": "[S]",
"<レターボックスサイズ>": "[L]",
"<字幕・レターボックスサイズ>": "[字][L}",
"<字幕スーパー>": "[字]",
"[字]所さんの世田谷ベ―ス ": "世田谷ベ―ス",
"BSニュース": "BSニュース",
"World+Biz": "Word+Biz",
"ワイルドライフ「": "ワ「",
"深層NEWS": "深層NEWS",
"[字]報道1930▼": "報道1930▽",
"[字]報道1930": "報道1930▽",
# 録画モード
"1.5倍録": "x1.5",
"10倍録": "x10",
"15倍録": "x15",
"3倍録": "x3",
"4倍録": "x4",
"5倍録": "x5",
"8倍録": "x8",
# 放送局名(個別表記統一)
"NHK BS": "NHK-BS",
"BS松竹東急": "BS松竹東急",
"BSテレ東": "BSテレ東",
"フジテレビ": "フジテレビ",
"テレビ東京1": "テレビ東京1",
"テレビ朝日": "テレビ朝日",
"スペシャプラス": "スペシャプラス",
"スターチャンネル2": "スターチャンネル2",
"スターチャンネル1": "スターチャンネル1",
"エムオン!": "M-ON",
"アニメ/特撮": "アニメ特撮",
"WOWOWプライム": "WOWOWプライム",
"TOKYO MX2": "TOKYO MX2",
"TOKYO MX1": "東京MX",
"TOKYO MX1": "東京MX",
"NHK総合1・東京": "NHK総合",
"NHKEテレ1東京": "NHKEテレ",
"NHKBSプレミアム": "BSプレミアム",
"BSフジ・181": "BSフジ",
"BS11イレブン": "BS11イレブン",
"BS103": "BS 103",
# ジャンル
"演劇/公演": "演劇",
"ドキュメンタリー/教養": "ドキュ教養",
"趣味/教育": "趣味教育",
"ニュース/報道": "報道",
"バラエティ": "バラエティ",
"情報/ワイドショー": "ワイドショー",
}
# 辞書ループによる置換実行
for old_str, new_str in replace_dict.items():
s = s.replace(old_str, new_str)
# ==========================================================
# UTF-8 で CSV 出力
# ==========================================================
with open(OUTPUT_FILE, "w", encoding="UTF-8") as f:
f.write(s)
print("処理が完了しました。")
# ==============================