10.7. glob — Unix 形式のパス名のパターン展開

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


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

文字通りにマッチさせる場合はメタ文字を括弧に入れてください。例えば、'[?]' は文字 '?' にマッチします。

glob.glob(pathname)

pathname (パスの指定を含んだ文字列でなければいけません。)にマッチする空の可能性のあるパス名のリストを返します。 pathname は(/usr/src/Python-1.5/Makefile のように)絶対パスでもいいし、(../../Tools/*/*.gif のように)相対パスでもよくて、シェル形式のワイルドカードを含んでいてもかまいません。結果には(シェルと同じく)壊れたシンボリックリンクも含まれます。

glob.iglob(pathname)

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

バージョン 2.5 で追加.

たとえば、次の三つのファイルだけがあるディレクトリを考えてください: 1.gif2.txtcard.gifglob() は次のような結果になります。パスに接頭するどの部分が保たれているかに注意してください。

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

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

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

参考

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