🐍 Python

iterdir() でディレクトリ内を列挙する

iterdir()は、指定したディレクトリの直下にあるファイル・ディレクトリを全て(拡張子などで絞り込まずに)列挙します。パターンで絞り込みたい場合はglob()のほうが適しています。

p.iterdir()  # pの直下にある全エントリ(ファイル・ディレクトリ)を列挙
# 事前にglobtest/にa.txt, b.txt, c.py, sub/ があるとする
from pathlib import Path

globdir = Path("globtest")
entries = sorted(p.name for p in globdir.iterdir())
print(entries)
# ['a.txt', 'b.txt', 'c.py', 'sub']
# is_file()と組み合わせてファイルだけに絞り込む
from pathlib import Path

globdir = Path("globtest")
files_only = sorted(p.name for p in globdir.iterdir() if p.is_file())
print(files_only)
# ['a.txt', 'b.txt', 'c.py']
iterdir()の性質
ファイルとディレクトリを区別しない
拡張子や種別によるフィルタリングは行わないため、絞り込みたい場合はif p.is_file()やif p.suffix == ".txt"のような条件を自分で書く
順序は保証されない
OSのファイルシステムが返す順のため、決まった順序が必要ならsorted()で明示的に並べ替える
💡 AIコードレビュー観点:iterdirとglobの使い分け

iterdir()は「とにかく直下の全部」、glob("*.txt")は「パターンに一致するものだけ」を返します。AIが生成したコードで[p for p in path.iterdir() if p.suffix == ".txt"]のようにiterdir()+手動フィルタを書いている場合、同じ結果をpath.glob("*.txt")1行でより簡潔に書けることが多いです。ただし複数の条件で複雑な絞り込みが必要な場合はiterdir()+条件式のほうが読みやすいこともあり、一概にどちらが正解とは言えません。

← Python pathlib クイックリファレンス一覧へ戻る / glob/rglobでパターン検索する →