#!/usr/bin/env python3 """Pixels to Motors データの索引を作り直す。 置き場所(MASTER 保存先テーブル): iCloud PixelstoMotors/_index/ 番号の決まり: data_manifest_rules.md 11節 書き出すもの(_index/ の中だけ。元データは読むだけ): INDEX.md 入口(知りたいこと → 開く場所)・関係の要約・古くなった説明の一覧 data/relations.csv 記事 ↔ KIOXIA のデータ(記事の作業ファイル本文に書かれた参照だけ。確定) data/candidates.csv 名前の番号だけで結びつく候補(確定ではない) data/build_log.json 実行の記録(いつ・どこを見たか・見られなかったもの) 入力: data/published_articles.csv(公開記事の一覧。tools/export_published.py で p2m-site から書き出す) 守ること: - 書き込みは _index/ の中だけ。一時ファイルから os.replace で差し替える - KIOXIA がつながっていなければ、関係表と候補は前回のものを残し、INDEX.md に「未接続」と書く - KIOXIA で見るのは r2r2r-data の中だけ。archive/ は見ない。ファイルの中身は README の文字と台帳の行数・列数だけ読む - パスに .. を含む参照は扱わない 使い方(Mac): python3 build_index.py ほかの場所で回すときは --icloud / --kioxia / --scripts でパスを渡す """ import argparse, csv, datetime as dt, json, os, re, tempfile from collections import defaultdict from pathlib import Path HOME = Path.home() DEF_ICLOUD = HOME / 'Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors' DEF_KIOXIA = Path('/Volumes/KIOXIA/r2r2r-data') DEF_SCRIPTS = HOME / 'r2r2r-scripts' # 表示用のパス(Mac での書き方) SHOW = {'I': '~/…/PixelstoMotors', 'K': '/Volumes/KIOXIA/r2r2r-data', 'C': '~/r2r2r-scripts'} # KIOXIA の上の階層(保存先テーブルにあるもの)。archive は参照の対象にしない K_TOPS = ['runs', 'lab', 'datasets', 'checkpoints', 'recordings', 'vision', 'mecharm_calibration', 'diag', 'service_sim', 'videos', 'fk_tables'] REF_RE = re.compile(r'(? --out data/published_articles.csv`') L.append('2. Mac で KIOXIA をつないで: `python3 tools/build_index.py`') L.append('') L.append('元データ(iCloud・KIOXIA・r2r2r-scripts)は読むだけ。書くのは `_index/` の中だけ。KIOXIA で読むのは r2r2r-data の中(archive/ を除く)の名前と、README の文字・台帳の行数と列数だけ。') log['finished'] = now().isoformat(timespec='seconds') write_atomic(out / 'INDEX.md', '\n'.join(L) + '\n') write_atomic(data / 'build_log.json', json.dumps(log, ensure_ascii=False, indent=2) + '\n') print(json.dumps(log, ensure_ascii=False)) if __name__ == '__main__': main()