このモジュールは Unix のシェル形式のワイルドカードへの対応を提供しますが、(re モジュールでドキュメント化されている) 正規表現と同じでは ありません 。シェル形式のワイルドカードで使われる特別な文字は、
Pattern | Meaning |
---|---|
* | すべてにマッチします |
? | 任意の一文字にマッチします |
[seq] | seq にある任意の文字にマッチします |
[!seq] | seq にない任意の文字にマッチします |
ファイル名のセパレーター(Unixでは '/')はこのモジュールに固有なものでは ない ことに注意してください。パス名展開については、 glob モジュールを参照してください (glob はパス名の部分にマッチさせるのに fnmatch() を使っ ています)。同様に、ピリオドで始まるファイル名はこのモジュールに固有ではなくて、 * と ? のパターンでマッチします。
filenameの文字列がpatternの文字列にマッチするかテストして、真、偽のいずれかを返します。 オペレーティングシステムが大文字、小文字を区別しない場合、比較を行う前に、両方のパラメタを全て大文字、または全て小文字に揃えます。 オペレーティングシステムが標準でどうなっているかに関係なく、大小文字を区別して比較したい場合には、 fnmatchcase() を代わりに使って ください。
次の例では、カレントディレクトリにある、拡張子が .txt である全てのファイルを表示しています。
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
filename が pattern にマッチするかテストして、真、偽を返します。比較は大文字、小文字を区別します。
pattern にマッチする names のリストの部分集合を返します。 [n for n in names if fnmatch(n, pattern)] と同じですが、もっと効率よく実装しています。
バージョン 2.2 で追加.
シェルスタイルの pattern を、正規表現に変換して返します。
例:
>>> import fnmatch, re
>>>
>>> regex = fnmatch.translate('*.txt')
>>> regex
'.*\\.txt$'
>>> reobj = re.compile(regex)
>>> print reobj.match('foobar.txt')
<_sre.SRE_Match object at 0x...>
参考