テクノロジー · 実用ガイド
Pathlib が隠しファイルを拾う?結果を捨てず、walk を枝刈りする
結果フィルターは Python がディレクトリへ入った後です。hidden の定義を決め、top-down で枝刈りし、訪問しなかった木を記録します。

Pathlib では先頭ドットは自動除外ではなく、glob は dot name を一致させます。一方 glob.glob には include_hidden があります。rglob の結果を後から捨てても、その directory と子孫への走査は既に行われています。
POSIX の dot prefix、Windows hidden attribute、application cache のどれを hidden とするか先に決めます。top-down walk で dirnames から除外 directory を消し、file は別に判定し、visited・skipped・symlink・error の ledger を残します。
hidden policy を先に書く
root、platform、Python version、目的を記録し、dot、Windows attribute、build/vendor などの application exclusion を別々に定義します。
platform metadata を確認しない一文字テストを cross-platform と呼ばないでください。
descent 前に directory を枝刈りする
Python 3.12+ では root.walk(top_down=True) を使い、許可する child name だけを dirnames[:] に戻します。除外された subtree には入りません。
旧版は os.walk(topdown=True) で同じ操作をします。変数の再代入ではなく list の in-place 更新が必要です。
file filter と glob 差分を分ける
directory を枝刈りした後、file name を同じ policy で判定し、.DS_Store などの leaf を除外します。
glob.glob を使うなら include_hidden を明記します。** の recursion は大規模 tree で高コストです。
Windows 属性と symlink を明示する
Windows では directory と file の FILE_ATTRIBUTE_HIDDEN を supported metadata API で調べます。dot convention とは別物です。
directory symlink は既定で追わず、必要なら stable identity を記録して重複を拒否します。
acceptance manifest を作る
on_error で path、operation、exception を残し、permission error を failure、incomplete、allowed skip のどれにするか決めます。
manifest に root、policy version、visited count、yielded count、skip reason、symlink policy、error を含め、小さな fixture で regression test します。
