ホームページ >バックエンド開発 >Python チュートリアル >Python を使用してサブフォルダー内のファイルを効率的に検索して一覧表示するにはどうすればよいですか?
再帰的なサブフォルダーの検索とファイルの一覧表示
複数のサブフォルダーを横断し、以下に基づいて特定のファイルを抽出する必要があるシナリオがよく発生します。ファイル拡張子。これに取り組む 1 つのアプローチは、Python の組み込み os.walk 関数を活用することです。これにより、ディレクトリとその内容の再帰的探索が可能になります。
ただし、この質問で遭遇したように、問題のある動作は、ファイルのパス。 os.walk によって返される subFolder 変数は、各ファイルが存在する特定のフォルダーではなく、サブフォルダーのリストを表します。
この問題を解決するには、正しいアプローチは dirpath (または指定されたコードの root) を利用することです。 、反復の現在のディレクトリを表します。完全なファイル パスを構築するには、dirpath 値をファイル名と連結する必要があります。
さらに、再帰プロセスから特定のフォルダーを削除するなどの追加要素を考慮することが重要です。これは、DN を調べることで実現できます。 (ディレクトリ名) リスト。ファイル拡張子のチェックに文字列操作に依存しないようにするには、os.path.splitext 関数を利用できます。
これらの機能強化を組み込んだ最適化されたバージョンのコードを次に示します。
<code class="python">import os result = [ os.path.join(dp, f) for dp, dn, filenames in os.walk(PATH) for f in filenames if os.path.splitext(f)[1] == ".txt" ]</code>
代わりに、拡張子に基づいてファイルを選択するために使用できるもう 1 つの強力なツールである glob も使用できます。以下は glob を使用した例です:
<code class="python">import os from glob import glob result = [ y for x in os.walk(PATH) for y in glob(os.path.join(x[0], "*.txt")) ]</code>
Python 3.4 の場合、Pathlib はこのタスクに対して直感的なアプローチを提供します:
<code class="python">from pathlib import Path result = list(Path(".").rglob("*.[tT][xX][tT]"))</code>
以上がPython を使用してサブフォルダー内のファイルを効率的に検索して一覧表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。