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

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

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

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

ドット (".") で始まるファイルは、同じくドットで始まるパターンにのみマ
ッチします。この動作は "fnmatch.fnmatch()" や "pathlib.Path.glob()" と
は異なります。 (チルダやシェル変数の展開には、 "os.path.expanduser()"
と "os.path.expandvars()" を使ってください。)

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

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

glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

   パスの仕様を含む文字列 *pathname* にマッチするパス名のリストを返し
   ます。戻り値のリストは空になる可能性があります。 *pathname* は
   ("/usr/src/Python-1.5/Makefile" のような) 絶対パスも、
   ("../../Tools/*/*.gif" のような) 相対パスもどちらも指定可能で、シェ
   ル形式のワイルドカードを含めることもできます。参照先が存在しない、
   壊れたシンボリックリンクも (シェルの場合と同様に) 結果に含まれます
   。結果がソートされているかどうかはファイルシステムによります。条件
   を満たすファイルがこの関数の呼び出し中に追加または削除された場合、
   それらのファイルに対するパス名が結果に含まれるかどうかはの動作は不
   定です。

   *root_dir* が "None" でない場合、その値は検索のルートディレクトリを
   指定する *path-like オブジェクト* でなければなりません。これは
   "glob()" を呼び出す前にカレントディレクトリを変更したのと同じ効果を
   持ちます。 *pathname* が相対パスの場合、戻り値のリストは *root_dir*
   からの相対パスを含むことになります。

   この関数は *dir_fd* パラメタで ディレクトリ記述子への相対パス をサ
   ポートしています。

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

   *include_hidden* が真の場合、パターン ""**"" は隠しディレクトリにマ
   ッチします。

   Raises an auditing event "glob.glob" with arguments "pathname",
   "recursive".

   Raises an auditing event "glob.glob/2" with arguments "pathname",
   "recursive", "root_dir", "dir_fd".

   注釈:

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

   注釈:

     This function may return duplicate path names if *pathname*
     contains multiple ""**"" patterns and *recursive* is true.

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

   バージョン 3.10 で変更: *root_dir* と *dir_fd* 引数が追加されました
   。

   バージョン 3.11 で変更: *include_hidden* パラメータが追加されました
   。

glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

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

   Raises an auditing event "glob.glob" with arguments "pathname",
   "recursive".

   Raises an auditing event "glob.glob/2" with arguments "pathname",
   "recursive", "root_dir", "dir_fd".

   注釈:

     This function may return duplicate path names if *pathname*
     contains multiple ""**"" patterns and *recursive* is true.

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

   バージョン 3.10 で変更: *root_dir* と *dir_fd* 引数が追加されました
   。

   バージョン 3.11 で変更: *include_hidden* パラメータが追加されました
   。

glob.escape(pathname)

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

   Added in version 3.4.

For example, consider a directory containing the following files:
"1.gif", "2.txt", "card.gif" and a subdirectory "sub" which contains
only the file "3.txt".  "glob()" will produce the following results.
Notice how any leading components of the path are preserved.

   >>> 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']

参考:

  Module "fnmatch"
     Shell-style filename (not path) expansion
