11.8. "fnmatch" --- Unix ファイル名のパターンマッチ
***************************************************

**ソースコード:** Lib/fnmatch.py

======================================================================

このモジュールは Unix のシェル形式のワイルドカードに対応しています。こ
れらは、 ("re" モジュールでドキュメント化されている) 正規表現とは *異
なります* 。シェル形式のワイルドカードで使われる特殊文字は、次のとおり
です。

+--------------+--------------------------------------+
| Pattern      | 意味                                 |
|==============|======================================|
| "*"          | すべてにマッチします                 |
+--------------+--------------------------------------+
| "?"          | 任意の一文字にマッチします           |
+--------------+--------------------------------------+
| "[seq]"      | *seq* にある任意の文字にマッチします |
+--------------+--------------------------------------+
| "[!seq]"     | *seq* にない任意の文字にマッチします |
+--------------+--------------------------------------+

リテラルにマッチさせるには、メタ文字を括弧に入れてください。例えば、
"'[?]'" は文字 "'?'" にマッチします。

ファイル名の区切り文字 (Unixでは "'/'") はこのモジュールに固有なもので
は *ない* ことに注意してください。パス名展開については、 "glob" モジュ
ールを参照してください ("glob" はパス名の部分にマッチさせるのに
"filter()" を使っています)。同様に、ピリオドで始まるファイル名はこのモ
ジュールに固有ではなくて、 "*" と "?" のパターンでマッチします。

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
   '(?s:.*\\.txt)\\Z'
   >>> reobj = re.compile(regex)
   >>> reobj.match('foobar.txt')
   <_sre.SRE_Match object; span=(0, 10), match='foobar.txt'>

参考:

  "glob" モジュール
     Unix シェル形式のパス展開。
