python3でファイルツリーをトラバースしたい場合、標準ライブラリとしてはos.walk
が用意されているのですが、このAPIは指定したディレクトリの配下すべてを探索してしまうため、「特定の名称のディレクトリの配下は走査しない」というような場合には、os.walk
を利用せず、自前で実装することになります。
以下は「カレントディレクトリからファイルツリーをトラバースしていって、ファイルが見つかったら何かする、ただし.git
ディレクトリと.svn
ディレクトリの配下は走査しない」ということを実装したものになります。
import pathlib
stack = [pathlib.Path('./')]
skips = {'.git', '.svn'}
while stack:
entry = stack.pop()
if entry.name in skips:
continue
if entry.is_dir():
stack.extend(entry.iterdir())
if entry.is_file():
do_something(entry)
2022-01-17 22:00 追記
コメントで指摘があった通り、os.walk
でも同じことが実現できることがわかりました。不勉強でした(´・ω・`)
import os
skips = {'.git', '.svn'}
for dirpath, dirnames, filenames in os.walk('./'):
for skip in skips:
if skip in dirnames:
dirnames.remove(skip)
for filename in filenames:
do_something(os.path.join(dirpath, filename))