雑学としての DVD形式
ぶんぶん
すかすか
DVD-Video規格の解像度ルール
DVD-Videoで使える解像度は複数あります:
720×480(フルD1)
704×480(ほぼ同じだが端を削ったD1)
352×480(ハーフD1)
352×240(SIF)
つまり、LPやEPモードで録画された映像は「ハーフD1」や「SIF」として保存されている。
じじぃ~
すぴ~かぁ~ こける
ぴ~こ
ぴ~こ
サブPC
の
すぴ~かぁ~
が
こけるこけるこける
なぜ???
よし!
頑丈な
すぴ~かぁ~
スタンドを
製作
しよう・・・
が!
金は ない!
じじぃ~
Dimora to xlsx (4)
ぶるれこ様の
データを
なるべく
手間を かけないで!
xlsxで 読み込めるようにする
以前も 作ったけど・・・
ぜんめんりにゅ~ある である
製作:Microsoft Copilot様
OnLineBackUp で ありんす♪
# ==== xlsx to openpyxl to ods 変!
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill, Border, Side, Alignment
from openpyxl.worksheet.page import PageMargins
# === 定数 ===
INPUT_FILE = r"F:\_pypy\DIGA\COPY\recList-USB.xlsx"
OUTPUT_FILE = r"F:\_pypy\DIGA\COPY\recList-USB-styled.xlsx"
# Excelファイルを読み込み
wb = load_workbook(INPUT_FILE)
ws = wb.active
# --- 列幅を辞書形式で指定 ---
col_widths = {
"A": 17,
"B": 12,
"C": 66,
"D": 5,
"E": 4,
"F": 8,
"G": 6,
"H": 10,
"I": 3,
"J": 6,
}
for col, width in col_widths.items():
ws.column_dimensions[col].width = width
# --- タイトル行のスタイル ---
title_font = Font(name="00コミック7", size=10, bold=True, color="000000")
title_fill = PatternFill(start_color="FFFF99", end_color="FFFF99", fill_type="solid") # 薄い黄色
thin_border = Border(
left=Side(style="thin"),
right=Side(style="thin"),
top=Side(style="thin"),
bottom=Side(style="thin")
)
for cell in ws[1]: # 1行目(タイトル行)
cell.font = title_font
cell.fill = title_fill
cell.border = thin_border
cell.alignment = Alignment(horizontal="center", vertical="center")
# --- データ行のフォント指定(列ごとに異なる) ---
for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
row[0].font = Font(name="Times New Roman", size=12, bold=True) # 列A
row[1].font = Font(name="Times New Roman", size=12, bold=True) # 列B
row[2].font = Font(name="木漏れ日ゴシック", size=12, bold=True) # 列C
row[3].font = Font(name="Times New Roman", size=12, bold=True) # 列D
row[4].font = Font(name="Times New Roman", size=12, bold=True) # 列E
row[5].font = Font(name="Times New Roman", size=12, bold=True) # 列F
row[6].font = Font(name="Times New Roman", size=12, bold=True) # 列G
row[7].font = Font(name="Times New Roman", size=10, bold=False) # 列H
row[8].font = Font(name="Times New Roman", size=6, bold=False) # 列I
row[9].font = Font(name="Times New Roman", size=6, bold=False) # 列J
# 罫線を全セルに適用
for cell in row:
cell.border = thin_border
# --- セルの書式設定例 ---
for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
# 分(整数+3桁区切り)
row[3].number_format = "#,##0"
# 放送開始日時(h:mm)
row[1].number_format = "h:mm"
# 通貨列がある場合(例: 列J)
# row[9].number_format = "¥#,##0"
# --- 印刷設定 ---
ws.page_setup.paperSize = ws.PAPERSIZE_A4
ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE
ws.page_margins = PageMargins(left=0.25, right=0.25, top=0.25, bottom=0.25)
# 保存
wb.save(OUTPUT_FILE)
print(f"整形完了: {OUTPUT_FILE}")
## ✅ このコードのポイント
# - **列幅**:辞書形式で管理 → `col_widths` に列と幅をまとめて指定
# - **タイトル行**:フォント「00コミック7」、背景色「薄い黄色」、罫線+中央揃え
# - **データ行**:列ごとにフォントを変える(Times New Roman、木漏れ日ゴシックなど)
# - **セル書式**:数値は `#,##0`、時間は `h:mm`、通貨は `¥#,##0`
# - **印刷設定**:A4横向き、余白最小
# これで「見た目だけ整える」処理が一通り可能になります。
# 👉 次のステップとしては「条件付き書式(例:未視聴なら背景色を変える)」を追加することもできますが、
# まずはこの基本スタイルで試してみますか?
# # ==============================
Dimora to xlsx (3)
ぶるれこ様の
データを
なるべく
手間を かけないで!
xlsxで 読み込めるようにする
以前も 作ったけど・・・
ぜんめんりにゅ~ある である
製作:Microsoft Copilot様
OnLineBackUp で ありんす♪
# ==== csv to pandas to xlsx 変!
# 2. 「録画先」列をチェックして **本体** と **USB-HDD** に分ける
# 3. それぞれを Excel (`.xlsx`) に出力
# - 本体 → `recList-本体.xlsx`
# - USB-HDD → `recList-USB.xlsx`
# 4. タイトル行(カラム名)は両方のファイルに必ず含める
# 5. 出力形式は UTF-8 → Excel形式(openpyxlで後処理可能)
## 📂 完成版コード例:`3-reclist_pandas_xlsx.py`
import pandas as pd
import os
# === 定数 ===
BASE_DIR = r"F:\_pypy\DIGA\COPY"
INPUT_FILE = os.path.join(BASE_DIR, "recList.csv")
OUTPUT_FILE_MAIN = os.path.join(BASE_DIR, "recList-本体.xlsx")
OUTPUT_FILE_USB = os.path.join(BASE_DIR, "recList-USB.xlsx")
def split_and_export(input_file, output_main, output_usb):
try:
# CSV読み込み(カラム行あり)
df = pd.read_csv(input_file, encoding="utf-8")
# ==== ここから
# 列の削除: 複数列を削除する場合は drop を使用
df = df.drop(columns=["DMR-", "視聴/未"])
# 列の挿入: insert を使う(位置を指定して1列ずつ)
# 例: 先頭に「行」列を追加(値は空文字)
df.insert(0, "行", "")
df.insert(1, "頁", "")
df.insert(2, "時間", "")
df.insert(3, "ももんが", "")
# 列の並べ替え: DataFrame の列をリストで再指定
df = df[[
"□放送開始日時□",
"□放送局□",
"☆番組タイトル☆",
"行", "頁", "分", "時間", "MODE", "ジャンル", "録画先"
]]
# ==== ここまで
# 「録画先」が本体の行を抽出
df_main = df[df["録画先"] == "本体"].copy()
# 連番付与(1から開始)
df_main["行"] = range(1, len(df_main) + 1)
# 「頁」列を数値形式で 1 で埋める
df_main["頁"] = 1
# 「録画先」がUSB-HDDの行を抽出
df_usb = df[df["録画先"] == "USB-HDD"].copy()
# 連番付与(1から開始)
df_usb["行"] = range(1, len(df_usb) + 1)
# 「頁」列を数値形式で 1 で埋める
df_usb["頁"] = 1
# 列の並べ替え(存在する列だけを安全に並べ替え)
desired_cols = [
"□放送開始日時□",
"□放送局□",
"☆番組タイトル☆",
"行", "頁", "時間", "MODE", "ジャンル", "分", "録画先"
]
df_main = df_main[[c for c in desired_cols if c in df_main.columns]]
df_usb = df_usb [[c for c in desired_cols if c in df_usb.columns]]
# Excel出力(タイトル行=カラム名を含む)
if not df_main.empty:
df_main.to_excel(output_main, index=False, engine="openpyxl")
print(f"出力完了: {output_main}")
else:
print("本体データがありません")
if not df_usb.empty:
df_usb.to_excel(output_usb, index=False, engine="openpyxl")
print(f"出力完了: {output_usb}")
else:
print("USB-HDDデータがありません")
except FileNotFoundError:
print(f"入力ファイルが見つかりません: {input_file}")
except Exception as e:
print(f"エラー発生: {e}")
if __name__ == "__main__":
split_and_export(INPUT_FILE, OUTPUT_FILE_MAIN, OUTPUT_FILE_USB)
## ✅ このスクリプトの動き
# - `recList.csv` を pandas で読み込む
# - 「録画先」列を基準にフィルタリング
# - 本体用とUSB用に分けて `.xlsx` 出力
# - 出力ファイルには必ずカラム行(タイトル行)が含まれる
# これで **第三弾の仕様**は完成です!
# 👉 次のステップでは、openpyxlを使って「セルの書式設定」や「シートの加工」も可能になります。
# 試しにこのコードを走らせてみますか?
# ==============================
Dimora to xlsx (2)
ぶるれこ様の
データを
なるべく
手間を かけないで!
xlsxで 読み込めるようにする
以前も 作ったけど・・・
ぜんめんりにゅ~ある である
製作:Microsoft Copilot様
OnLineBackUp で ありんす♪
# ==== tsv to csv & replace 変!
import os
# === 定数 ===
BASE_DIR = r"F:\_pypy\DIGA\COPY"
TSV_FILE = os.path.join(BASE_DIR, "recList.tsv")
OUTPUT_FILE = os.path.join(BASE_DIR, "recList.csv")
# 置換ルール(例)
REPLACEMENTS = {
"録画時間 (分)": "分",
"録画モード": "MODE",
"未視聴": "未",
"放送局名": "□放送局□",
"放送開始日時": "□放送開始日時□",
(中略)
"15倍録": "x15",
"10倍録": "x10",
"8倍録": "x8",
"4倍録": "x4",
"3倍録": "x3",
"1.5倍録": "x1.5",
}
def replace_strings(text: str, replacements: dict) -> str:
"""文字列置換をまとめて実施"""
for old, new in replacements.items():
text = text.replace(old, new)
return text
def tsv_to_csv(tsv_path: str, csv_path: str, replacements: dict):
"""TSVを読み込み、置換してCSVに保存"""
try:
with open(tsv_path, "r", encoding="utf-8") as f:
content = f.read()
# 文字列置換
replaced = replace_strings(content, replacements)
# TSV → CSV(タブをカンマに変換)
csv_content = replaced.replace("\t", ",")
# 出力
with open(csv_path, "w", encoding="utf-8", newline="") as f:
f.write(csv_content)
print(f"変換完了: {tsv_path} → {csv_path}")
except FileNotFoundError:
print(f"ファイルが見つかりません: {tsv_path}")
except Exception as e:
print(f"エラー発生: {e}")
if __name__ == "__main__":
tsv_to_csv(TSV_FILE, OUTPUT_FILE, REPLACEMENTS)
## ✅ このスクリプトの動き
# 1. `F:\_pypy\DIGA\COPY\recList.tsv` を読み込む
# 2. `REPLACEMENTS` に従って文字列を一括置換
# 3. タブ区切りをカンマ区切りに変換
# 4. `recList.csv` としてUTF-8で保存
# 💡 ポイント
# - 置換ルールは `REPLACEMENTS` にどんどん追加できます
# - TSVのタブ区切りをそのままカンマに変換しているので、Excelなどで開くとCSVとして認識されます
# - 出力ファイルは **同じフォルダに `recList.csv`** が生成されます
# これで「第2弾」仕様は完成です!
# 👉 次のステップとしては、置換ルール(大量にあるとのこと)を別ファイルにまとめて管理する方法も便利ですが、まずはこの形で動かしてみますか?
# ==============================