glob
--- Unix 形式のパス名のパターン展開¶
ソースコード: Lib/glob.py
The glob
module finds pathnames
using pattern matching rules similar to the Unix shell.
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.
注釈
The pathnames are returned in no particular order. If you need a specific order, sort the results.
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()
.
リテラルにマッチさせるには、メタ文字を括弧に入れてください。例えば、'[?]'
は文字 '?'
にマッチします。
The glob
module defines the following functions:
- glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)¶
パスの仕様を含む文字列 pathname にマッチするパス名のリストを返します。戻り値のリストは空になる可能性があります。 pathname は (
/usr/src/Python-1.5/Makefile
のような) 絶対パスも、 (../../Tools/*/*.gif
のような) 相対パスもどちらも指定可能で、シェル形式のワイルドカードを含めることもできます。参照先が存在しない、壊れたシンボリックリンクも (シェルの場合と同様に) 結果に含まれます。結果がソートされているかどうかはファイルシステムによります。条件を満たすファイルがこの関数の呼び出し中に追加または削除された場合、それらのファイルに対するパス名が結果に含まれるかどうかはの動作は不定です。If root_dir is not
None
, it should be a path-like object specifying the root directory for searching. It has the same effect onglob()
as changing the current directory before calling it. If pathname is relative, the result will contain paths relative to root_dir.この関数は dir_fd パラメタで ディレクトリ記述子への相対パス をサポートしています。
recursive が真の場合、パターン "
**
" はあらゆるファイルや0個以上のディレクトリ、サブディレクトリおよびディレクトリへのシンボリックリンクにマッチします。パターンの末尾がos.sep
またはos.altsep
の場合、ファイルは一致しません。include_hidden が真の場合、パターン "
**
" は隠しディレクトリにマッチします。引数
pathname
,recursive
を指定して 監査イベントglob.glob
を送出します。引数
pathname
,recursive
,root_dir
,dir_fd
を指定して 監査イベントglob.glob/2
を送出します。注釈
パターン "
**
" を大きなディレクトリツリーで使用するととてつもなく時間がかかるかもしれません。注釈
pathname が複数の "
**
" パターンを含み、かつ recursive が真の場合、この関数は同じパスを重複して返す可能性があります。バージョン 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()
と同じ値を順に生成する イテレーター を返します。引数
pathname
,recursive
を指定して 監査イベントglob.glob
を送出します。引数
pathname
,recursive
,root_dir
,dir_fd
を指定して 監査イベントglob.glob/2
を送出します。注釈
pathname が複数の "
**
" パターンを含み、かつ recursive が真の場合、この関数は同じパスを重複して返す可能性があります。バージョン 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.
- glob.translate(pathname, *, recursive=False, include_hidden=False, seps=None)¶
与えられたパスの仕様を
re.match()
で利用するための正規表現に変換します。シェル形式のワイルドカードを含めることもできます。例えば:
>>> import glob, re >>> >>> regex = glob.translate('**/*.txt', recursive=True, include_hidden=True) >>> regex '(?s:(?:.+/)?[^/]*\\.txt)\\z' >>> reobj = re.compile(regex) >>> reobj.match('foo/bar/baz.txt') <re.Match object; span=(0, 15), match='foo/bar/baz.txt'>
fnmatch.translate()
と違って、この関数ではパスの要素を区切るセパレータとセグメントには意味があります。デフォルトでは、ワイルドカードはパスのセパレータにはマッチしません。また*
パターンのセグメントは厳密に単一のパスのセグメントにマッチします。recursive が真の場合、パターンセグメント "
**
" は任意の数のパスセグメントにマッチします。include_hidden が真の場合、ワイルドカードはドット (
.
) で始まるパスセグメントにもマッチします。パスの要素を区切るセパレータのシーケンスを seps 引数に渡すことができます。渡さない場合は
os.sep
と (もしあれば)altsep
が使われます。参考
pathlib.PurePath.full_match()
とpathlib.Path.glob()
の2つのメソッドは、それぞれパターンマッチと glob 相当の操作を実装するためにこの関数を呼んでいます。Added in version 3.13.
使用例¶
次のファイルを含むディレクトリを考えます: 1.gif
, 2.txt
, card.gif
および:file: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
モジュールは、シェル形式の (パスではなく) ファイル名の展開機能を提供します。
参考
pathlib
モジュールは高水準のパスオブジェクトを提供します。