フォルダー内のディレクトリ パスを含むすべてのファイルを一覧表示する必要があります。を使用しようとしましたがos.walk
、これは明らかに完璧なソリューションです。
ただし、非表示のフォルダーとファイルも一覧表示されます。アプリケーションで非表示のフォルダやファイルを表示しないようにしたいです。隠しファイルを生成しないようにするために使用できるフラグはありますか?
クロスプラットフォームは私にとってそれほど重要ではありません.Linuxでのみ機能する場合は問題ありません(.*パターン)
os.walk()
いいえ、それらをスキップするオプションはありません。自分で行う必要があります(これは簡単です):
for root, dirs, files in os.walk(path):
files = [f for f in files if not f[0] == '.']
dirs[:] = [d for d in dirs if not d[0] == '.']
# use files and dirs
dirs[:] =
スライスの割り当てに注意してください。os.walk
にリストされているサブディレクトリを再帰的にトラバースしdirs
ます。の要素をdirs
基準を満たすもの (たとえば、名前が で始まらないディレクトリ.
) に置き換えることにより、基準を満たさos.walk()
ないディレクトリにアクセスしなくなります。
これは、のドキュメントから、topdown
キーワード引数を に保持する場合にのみ機能します。True
os.walk()
topdown
isの場合True
、呼び出し元は dirnames リストをその場で変更でき (おそらくdel
または スライス代入を使用)、名前がdirnameswalk()
に残っているサブディレクトリにのみ再帰します。これを使用して、検索を削除したり、特定の訪問順序を強制したり、呼び出し元が作成または名前変更したディレクトリについて通知したりしてから、再開することができます。walk()
walk()
__
質問で尋ねられなかったことに気づきましたが、隠しファイルと で始まるファイル、特に__pycache__
ディレクトリの両方を除外したいという同様の問題がありました。リストの理解が期待どおりに機能しない理由を理解しようとしていたため、この質問にたどり着きました。でリストを変更していませんでしたdirnames[:]
。
除外したいプレフィックスのリストを作成し、ディレクトリ名を次のように変更しました。
exclude_prefixes = ('__', '.') # exclusion prefixes
for dirpath, dirnames, filenames in os.walk(node):
# exclude all dirs starting with exclude_prefixes
dirnames[:] = [dirname
for dirname in dirnames
if not dirname.startswith(exclude_prefixes)]