#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os from pathlib import Path import json from datetime import datetime ROOT = Path(os.environ.get("ENHANCED_REPLICA_ROUTE_ROOT", r"F:\codex开发\研究\研究成果\实验路线\20260408_SOTA路线重构")) DATASET = ROOT / 'dataset' def ls_lines(dir_path: Path): lines = [] for p in sorted(dir_path.iterdir(), key=lambda x: (x.is_file(), x.name.lower())): if p.name == 'README.md': continue t = '目录' if p.is_dir() else '文件' lines.append(f'- `{p.name}`({t})') return '\n'.join(lines) if lines else '- (当前无其他内容)' def write_md(dir_path: Path, content: str): dir_path.mkdir(parents=True, exist_ok=True) (dir_path / 'README.md').write_text(content.strip() + '\n', encoding='utf-8') def main(): now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') archive_desc = ( "- `候选原始归档/`:历史候选资料归档。" if (ROOT / '候选原始归档').exists() else "- `候选原始归档/`:当前不存在(不影响主线实验)。" ) write_md(ROOT, f""" # 20260408_SOTA路线重构 最后更新:{now} ## 目录说明 - `dataset/`:统一 schema 的可直接实验数据。 - `env/`:Conda 环境与安装说明(本地4060/A100通用)。 - `runs/`:实验输出目录(按 EID/run_name 组织)。 - `复现/`:方法和路线文档。 {archive_desc} - `__pycache__/`:Python 缓存目录(自动生成)。 - `脚本/`:数据处理与实验脚本。 ## README 自动更新命令 ```powershell python F:\\codex开发\\研究\\研究成果\\实验路线\\20260408_SOTA路线重构\\脚本\\数据处理\\refresh_route_readmes.py ``` ## 当前内容 {ls_lines(ROOT)} """) pycache = ROOT / '__pycache__' if pycache.exists(): write_md(pycache, f""" # __pycache__ Python 运行时自动生成的缓存目录,删了会自动再生成。 ## 当前内容 {ls_lines(pycache)} """) script_root = ROOT / '脚本' if script_root.exists(): write_md(script_root, f""" # 脚本目录 - `数据处理/`:清洗与构建脚本。 - `跑实验用/`:训练、评估、推理脚本。 - `跑实验用_传统对照/`:TF-IDF、SVM 等传统机器学习对照脚本。 ## README 自动更新脚本 - `数据处理/refresh_route_readmes.py` ## 当前内容 {ls_lines(script_root)} """) for sub in [script_root / '数据处理', script_root / '跑实验用', script_root / '跑实验用_传统对照']: if sub.exists(): if sub.name == '数据处理': write_md(sub, f""" # {sub.name} ## 说明 - 放数据清洗、构建、审计脚本。 - 每次目录内容变化后,运行 `refresh_route_readmes.py` 更新 README。 ## 当前内容 {ls_lines(sub)} """) elif sub.name == '跑实验用_传统对照': write_md(sub, f""" # {sub.name} ## 说明 - 放传统机器学习对照实验脚本,不替代主线 E00-E11。 ## 当前内容 {ls_lines(sub)} """) else: write_md(sub, f""" # {sub.name} ## 说明 - 放训练、评估、推理、对比实验脚本。 ## 当前内容 {ls_lines(sub)} """) replay = ROOT / '复现' if replay.exists(): write_md(replay, f""" # 复现文档 ## 当前内容 {ls_lines(replay)} """) archive = ROOT / '候选原始归档' if archive.exists(): write_md(archive, f""" # 候选原始归档 历史留档目录,不作为当前主线训练输入。 ## 当前内容 {ls_lines(archive)} """) for p in sorted([x for x in archive.iterdir() if x.is_dir()]): write_md(p, f""" # {p.name} 归档快照目录。 ## 当前内容 {ls_lines(p)} """) if DATASET.exists(): write_md(DATASET, f""" # dataset 统一可用数据目录(主 schema)。 ## 当前内容 {ls_lines(DATASET)} """) for p in sorted([x for x in DATASET.iterdir() if x.is_dir()]): write_md(p, f""" # {p.name} ## 当前内容 {ls_lines(p)} """) for ds in sorted(DATASET.rglob('DS*_v1')): if not ds.is_dir(): continue mf = ds / 'manifest.json' if mf.exists(): m = json.loads(mf.read_text(encoding='utf-8')) write_md(ds, f""" # {m.get('dataset_id', ds.name)} ## 规模 - 总样本:{m.get('record_count_total', 0)} - split:{m.get('record_count_by_split', {})} - label(human=0, ai=1):{m.get('record_count_by_label', {})} ## 当前内容 {ls_lines(ds)} """) else: write_md(ds, f""" # {ds.name} ## 当前内容 {ls_lines(ds)} """) env_dir = ROOT / 'env' if env_dir.exists(): write_md(env_dir, f""" # env ## 说明 - 放环境定义与安装说明。 ## 当前内容 {ls_lines(env_dir)} """) runs_dir = ROOT / 'runs' if runs_dir.exists(): write_md(runs_dir, f""" # runs ## 说明 - 实验运行产物目录。 - 路径约定:`runs///` ## 当前内容 {ls_lines(runs_dir)} """) print('Readme refresh done.') if __name__ == '__main__': main()