サブフォルダーを検索して特定のファイル タイプのリストを作成する場合、サブフォルダーが変数は正しいフォルダーを指しています。次のコード スニペットは、この問題を示しています。
<code class="python">for root, subFolder, files in os.walk(PATH): for item in files: if item.endswith(".txt"): fileNamePath = str(os.path.join(root, subFolder, item))</code>
ここで、subFolder 変数には、ITEM ファイルが存在するフォルダーではなく、サブフォルダーのリストが含まれています。これを修正するには、正しいディレクトリ パスを保持するルート変数で表される dirpath を使用します。この変更されたコード スニペットは、この問題に対処します:
<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 モジュールを利用することです:
<code class="python">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 以降のオファーglob ベースのソリューションのジェネレーター バージョン:
<code class="python">from itertools import chain result = (chain.from_iterable(glob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))</code>
最後に、Python 3.4 の場合、 pathlib モジュールを使用した最新のアプローチは次のとおりです:
<code class="python">from pathlib import Path result = list(Path(".").rglob("*.[tT][xX][tT]"))</code>
以上がPython で再帰的なサブフォルダーからファイルを効率的に一覧表示する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。