11.8. fnmatch --- Unix ファイル名のパターンマッチ¶
ソースコード: Lib/fnmatch.py
このモジュールは Unix のシェル形式のワイルドカードに対応しています。これらは、 (re モジュールでドキュメント化されている) 正規表現とは 異なります 。シェル形式のワイルドカードで使われる特殊文字は、次のとおりです。
| Pattern | 意味 | 
|---|---|
| * | すべてにマッチします | 
| ? | 任意の一文字にマッチします | 
| [seq] | seq にある任意の文字にマッチします | 
| [!seq] | seq にない任意の文字にマッチします | 
リテラルにマッチさせるには、メタ文字を括弧に入れてください。例えば、'[?]' は文字 '?' にマッチします。
Note that the filename separator ('/' on Unix) is not special to this
module.  See module glob for pathname expansion (glob uses
fnmatch() to match pathname segments).  Similarly, filenames starting with
a period are not special for this module, and are matched by the * and ?
patterns.
- 
fnmatch.fnmatch(filename, pattern)¶
- filename の文字列が pattern の文字列にマッチするかテストして、 - True、- Falseのいずれかを返します。 どちらの引数とも- os.path.normcase()を使って、大小文字が正規化されます。 オペレーティングシステムが標準でどうなっているかに関係なく、大小文字を区別して比較する場合には、- fnmatchcase()が使えます。- 次の例では、カレントディレクトリにある、拡張子が - .txtである全てのファイルを表示しています:- import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print(file) 
- 
fnmatch.fnmatchcase(filename, pattern)¶
- filename が pattern にマッチするかテストして、 - True、- Falseを返します。比較は大文字、小文字を区別し、- os.path.normcase()は適用しません。
- 
fnmatch.filter(names, pattern)¶
- pattern にマッチする names のリストの部分集合を返します。 - [n for n in names if fnmatch(n, pattern)]と同じですが、もっと効率よく実装しています。
- 
fnmatch.translate(pattern)¶
- シェルスタイルの pattern を、 - re.match()で使用するための正規表現に変換して返します。- 例: - >>> import fnmatch, re >>> >>> regex = fnmatch.translate('*.txt') >>> regex '.*\\.txt\\Z(?ms)' >>> reobj = re.compile(regex) >>> reobj.match('foobar.txt') <_sre.SRE_Match object; span=(0, 10), match='foobar.txt'> 
参考
- globモジュール
- Unix シェル形式のパス展開。
