概要

Pythonでは、特定の拡張子(例えば.txt)を持つファイルをディレクトリ内から検索する方法がいくつかあります。osモジュール、globモジュール、そしてpathlibモジュールを使ってファイルを検索するのが一般的です。それぞれのアプローチには特徴があり、用途に応じて使い分けが可能です。

glob を使った検索

globモジュールを使用すると、パターンマッチングで簡単に特定の拡張子のファイルを検索できます。

import glob
files = glob.glob('*.txt')
print(files)

再帰的に検索するには、Python 3.5以降でサポートされているrecursive=Trueオプションを使います。

files = glob.glob('/*.txt', recursive=True)
print(files)

os モジュールを使った検索

os.listdirでディレクトリ内のファイルを取得し、endswithでファイル拡張子をフィルタリングすることもできます。

import os
files = [f for f in os.listdir('.') if f.endswith('.txt')]
print(files)

再帰的な検索にはos.walkを使用します。

for root, dirs, files in os.walk('.'):
    for file in files:
        if file.endswith('.txt'):
            print(os.path.join(root, file))

pathlib を使った検索

pathlibPython 3.4以降で利用できる便利なモジュールです。Path.globでシンプルにファイル検索ができ、再帰的な検索もrglobで実現可能です。

from pathlib import Path
files = list(Path('.').glob('*.txt'))
print(files)

再帰的に検索する場合は次のようにします。

files = list(Path('.').rglob('*.txt'))
print(files)

結論

Pythonで特定の拡張子のファイルを検索する方法として、glob, os, pathlibのいずれかを使用できます。再帰的な検索が必要な場合はos.walkpathlib.Path().rglob()が便利で、シンプルな検索にはgloblistdirが適しています。用途に応じて使い分けましょう。