#!/usr/bin/env python3 """ generate_index.py 執行方式:將本腳本放在與 HTML 報告相同的資料夾,然後執行: python generate_index.py 會自動產生 index.html 目錄頁面。 """ import os import glob from datetime import datetime def get_html_files(folder: str) -> list[dict]: """取得資料夾內所有 HTML 檔案(排除 index.html),並回傳檔案資訊清單。""" files = [] pattern = os.path.join(folder, "*.html") for path in sorted(glob.glob(pattern)): filename = os.path.basename(path) if filename.lower() == "index.html": continue stat = os.stat(path) created_ts = stat.st_birthtime if hasattr(stat, "st_birthtime") else stat.st_mtime created_dt = datetime.fromtimestamp(created_ts) files.append({ "filename": filename, "created": created_dt.strftime("%Y-%m-%d %H:%M"), "created_iso": created_dt.isoformat(), "size_kb": round(stat.st_size / 1024, 1), }) return files def build_cards(files: list[dict]) -> str: if not files: return '

目前資料夾內沒有找到任何報告檔案。

' cards = [] for f in files: name_no_ext = os.path.splitext(f["filename"])[0] cards.append(f"""

{name_no_ext}

{f['filename']}

{f['created']} {f['size_kb']} KB
""") return "\n".join(cards) def generate_html(files: list[dict]) -> str: now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") total = len(files) cards_html = build_cards(files) return f""" 報告彙整入口

Report Portal

報告彙整入口

集中瀏覽本資料夾內的所有 HTML 報告檔案

{total} 份報告
最後更新:{now}
{cards_html}

找不到符合的報告。

""" def main(): folder = os.path.dirname(os.path.abspath(__file__)) print(f"📂 掃描資料夾:{folder}") files = get_html_files(folder) print(f"✅ 找到 {len(files)} 個 HTML 報告檔案(已排除 index.html)") for f in files: print(f" • {f['filename']} ({f['created']}, {f['size_kb']} KB)") html = generate_html(files) output_path = os.path.join(folder, "index.html") with open(output_path, "w", encoding="utf-8") as fh: fh.write(html) print(f"\n🎉 已產生:{output_path}") if __name__ == "__main__": main()