Python: 特定の拡張子のファイル一覧を(再帰的に)取得 glob()

Pythonで「*.html」や「*.txt」など特定の拡張子のファイル一覧を 取得したい場合はglobモジュールのglob関数を使用します。
ワイルドカードの「*」と「?」を使用することができ、 例えばhtmlファイルを取得したい場合は「*.html」と記述します。

glob関数の引数に「recursive=True」を指定することで 再帰的に取得することもできます。

glob()関数の基本的な使い方

次のサンプルコードでは「*.py」と指定して、 Pythonファイルの一覧を取得しています。

import glob

path = "./*.py"

files = glob.glob(path)

print(files)
実行結果
['.\\test.py', '.\\test2.py']

パスを相対パスで指定した場合、 戻ってくるファイルも相対パスになります。

次はパスを絶対パスで指定してみます。

import glob

path = "D:\\test\\python\\*.py"

files = glob.glob(path)

print(files)
実行結果
['D:\\test\\python\\test.py', 'D:\\test\\python\\test2.py']

絶対パスで指定した場合は、 戻ってくるファイルも絶対パスとなります。

再帰的にファイル一覧を取得する

glob関数を使って再帰的にファイル一覧を取得する場合、 引数に「recursive = True」を指定します。

例えば「D:\\test」ディレクトリ以下にある「*.txt」を 再帰的に取得したい場合は次のように記述します。

glob.glob("D:\\test\\**\\*.txt", recursive = True)

または

glob.glob("D:/test/**/*.txt", recursive = True)

上のように指定した場合、 パス引数の「**」はあらゆるディレクトリにマッチして、 再帰的に検索します。 太字で示した「\\**」又は「/**」と「recursive = True」がポイントです。

glob関数を使った再帰的な検索のサンプルコードです。

import glob

path = "D:\\test\\**\\*.txt"

files = glob.glob(path, recursive = True)

print(files)

# 実行結果
['D:\\test\\test.txt', 'D:\\test\\sample.txt', 
'D:\\test\\python\\a.txt', 'D:\\test\\powershell\\b.txt']
Python