Pythonには、ファイル名のパターンマッチングを行うための2つのモジュール、glob
とfnmatch
があります。これらは似たような機能を持っていますが、それぞれ異なる特性と使用方法があります。
fnmatch
fnmatch
モジュールは、Unixシェルスタイルのワイルドカードをサポートしています。fnmatch
は、ファイル名がパターンに一致するかどうかをテストし、真偽値を返します。例えば、次のコードは、現在のディレクトリ内の.txt
拡張子を持つすべてのファイル名を出力します。
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print(file)
glob
一方、glob
モジュールは、ディレクトリ内のすべての名前に対してパターンをマッチさせ、マッチしたファイル名のリストを返します。glob
は、ディレクトリの各レベルでマッチングを行い、ワイルドカードをディレクトリ部分に許可します。
glob
とfnmatch
の主な違いは、glob
がファイルシステムを探索するのに対し、fnmatch
はそうではないということです。実際、glob
の実装ではfnmatch
が使用されています。
これらの違いを理解することで、Pythonでのファイル名のパターンマッチングがより効率的になります。