glob --- Unix 形式のパス名のパターン展開¶
ソースコード: Lib/glob.py
The glob module finds all the pathnames matching a specified pattern
according to the rules used by the Unix shell, although results are returned in
arbitrary order. No tilde expansion is done, but *, ?, and character
ranges expressed with [] will be correctly matched. This is done by using
the os.scandir() and fnmatch.fnmatch() functions in concert, and
not by actually invoking a subshell.
Note that files beginning with a dot (.) can only be matched by
patterns that also start with a dot,
unlike fnmatch.fnmatch() or pathlib.Path.glob().
(For tilde and shell variable expansion, use os.path.expanduser() and
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モジュールシェル形式の (パスではない) ファイル名展開