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)¶ 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
の場合、ファイルは一致しません。引数
pathname
,recursive
を指定して 監査イベントglob.glob
を送出します。引数
pathname
,recursive
,root_dir
,dir_fd
を指定して 監査イベントglob.glob/2
を送出します。注釈
パターン "
**
" を大きなディレクトリツリーで使用するととてつもなく時間がかかるかもしれません。バージョン 3.5 で変更: "
**
" を使った再帰的な glob がサポートされました。バージョン 3.10 で変更: root_dir と dir_fd 引数が追加されました。
-
glob.
iglob
(pathname, *, root_dir=None, dir_fd=None, recursive=False)¶ 実際には一度にすべてを格納せずに、
glob()
と同じ値を順に生成する イテレーター を返します。引数
pathname
,recursive
を指定して 監査イベントglob.glob
を送出します。引数
pathname
,recursive
,root_dir
,dir_fd
を指定して 監査イベントglob.glob/2
を送出します。バージョン 3.5 で変更: "
**
" を使った再帰的な glob がサポートされました。バージョン 3.10 で変更: root_dir と dir_fd 引数が追加されました。
-
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
モジュールシェル形式の (パスではない) ファイル名展開