"glob" --- Unix 形式のパス名のパターン展開
******************************************

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

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

"glob" モジュールは Unix シェルで使われているルールに従い指定されたパ
ターンに一致するすべてのパス名を見つけ出します。返される結果の順序は不
定です。チルダ展開は行われませんが、"*", "?", および "[]" で表現される
文字範囲については正しくマッチされます。これは、関数 "os.scandir()" お
よび "fnmatch.fnmatch()" を使用して行われており、実際にサブシェルを呼
び出しているわけではありません。"fnmatch.fnmatch()" と異なり、"glob"
はドット (".") で始まるファイル名は特別扱いする点に注意してください。(
チルダおよびシェル変数の展開を利用したい場合は "os.path.expanduser()"
および "os.path.expandvars()" を使用してください。)

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

参考: "pathlib" モジュールは高水準のパスオブジェクトを提供します。

glob.glob(pathname, *, recursive=False)

   *pathname* (パスの指定を含んだ文字列でなければいけません) にマッチ
   する、空の可能性のあるパス名のリストを返します。*pathname* は
   ("/usr/src/Python-1.5/Makefile" のように) 絶対パスでも、
   ("../../Tools/*/*.gif" のように) 相対パスでもよく、シェル形式のワイ
   ルドカードを含んでいてもかまいません。結果には (シェルと同じく) 壊
   れたシンボリックリンクも含まれます。結果がソートされるかどうかは、
   ファイルシステムによって異なります。この関数の呼び出し中に条件を満
   たすファイルが移動や追加された場合、そのファイルのパス名を含むかど
   うかは指定されていません。

   *recursive* が真の場合、パターン ""**"" はあらゆるファイルや0個以上
   のディレクトリ、サブディレクトリおよびディレクトリへのシンボリック
   リンクにマッチします。パターンの末尾が "os.sep" または "os.altsep"
   の場合、ファイルは一致しません。

   引数 "pathname", "recursive" を指定して 監査イベント "glob.glob" を
   送出します。

   注釈:

     パターン ""**"" を大きなディレクトリツリーで使用するととてつもな
     く時間がかかるかもしれません。

   バージョン 3.5 で変更: ""**"" を使った再帰的な glob がサポートされ
   ました。

glob.iglob(pathname, *, recursive=False)

   実際には一度にすべてを格納せずに、"glob()" と同じ値を順に生成する *
   イテレーター* を返します。

   引数 "pathname", "recursive" を指定して 監査イベント "glob.glob" を
   送出します。

glob.escape(pathname)

   すべての特殊文字 ("'?'" 、 "'*'" 、 "'['") をエスケープします。特殊
   文字を含んでいる可能性のある任意のリテラル文字列をマッチさせたいと
   きに便利です。drive/UNC sharepoints の特殊文字はエスケープされませ
   ん。たとえば Windows では "escape('//?/c:/Quo vadis?.txt')" は
   "'//?/c:/Quo vadis[?].txt'" を返します。

   バージョン 3.4 で追加.

たとえば、次の 3 個のファイル "1.gif", "2.txt", "card.gif" と、ファイ
ル  "3.txt" だけを含んだサブディレクトリ "sub" があった場合、"glob()"
は以下の結果を返します。パスに接頭する要素がどう維持されるかに注意して
ください。:

   >>> import glob
   >>> glob.glob('./[0-9].*')
   ['./1.gif', './2.txt']
   >>> glob.glob('*.gif')
   ['1.gif', 'card.gif']
   >>> glob.glob('?.gif')
   ['1.gif']
   >>> glob.glob('**/*.txt', recursive=True)
   ['2.txt', 'sub/3.txt']
   >>> glob.glob('./**/', recursive=True)
   ['./', './sub/']

ディレクトリが "." で始まるファイルを含んでいる場合、デフォルトでそれ
らはマッチしません。例えば、 "card.gif" と ".card.gif" を含むディレク
トリを考えてください:

   >>> import glob
   >>> glob.glob('*.gif')
   ['card.gif']
   >>> glob.glob('.c*')
   ['.card.gif']

参考:

  "fnmatch" モジュール
     シェル形式の (パスではない) ファイル名展開
