glob —Unixスタイルのパス名パターンの拡張
ソースコード: :source: `Lib / glob.py`
glob モジュールは、Unixシェルで使用されるルールに従って、指定されたパターンに一致するすべてのパス名を検索しますが、結果は任意の順序で返されます。 チルダ拡張は行われませんが、*
、?
、および[]
で表される文字範囲は正しく一致します。 これは、実際にサブシェルを呼び出すのではなく、 os.scandir()関数と fnmatch.fnmatch()関数を組み合わせて使用することによって行われます。 fnmatch.fnmatch()とは異なり、 glob は、ドット(.
)で始まるファイル名を特殊なケースとして扱うことに注意してください。 (チルダおよびシェル変数の展開には、 os.path.expanduser()および os.path.expandvars()を使用します。)
リテラル一致の場合は、メタ文字を角かっこで囲みます。 たとえば、'[?]'
は文字'?'
と一致します。
- glob.glob(pathname, *, recursive=False)
pathname に一致する、空の可能性のあるパス名のリストを返します。これは、パス指定を含む文字列である必要があります。 パス名は、絶対(
/usr/src/Python-1.5/Makefile
など)または相対(../../Tools/*/*.gif
など)のいずれかであり、シェルスタイルのワイルドカードを含めることができます。 壊れたシンボリックリンクが結果に含まれます(シェルの場合と同様)。 結果がソートされるかどうかは、ファイルシステムによって異なります。 この関数の呼び出し中に条件を満たすファイルが削除または追加された場合、そのファイルのパス名を含めるかどうかは指定されていません。recursive がtrueの場合、パターン「
**
」は、任意のファイルと0個以上のディレクトリ、サブディレクトリ、およびディレクトリへのシンボリックリンクに一致します。 パターンの後に os.sep または os.altsep が続く場合、ファイルは一致しません。ノート
大規模なディレクトリツリーで「
**
」パターンを使用すると、非常に長い時間がかかる場合があります。バージョン3.5で変更:「
**
」を使用した再帰的グロブのサポート。
- glob.escape(pathname)
すべての特殊文字(
'?'
、'*'
、および'['
)をエスケープします。 これは、特殊文字が含まれている可能性のある任意のリテラル文字列に一致させる場合に役立ちます。 ドライブ/ UNC共有ポイントの特殊文字はエスケープされません。 Windowsでは、escape('//?/c:/Quo vadis?.txt')
は'//?/c:/Quo vadis[?].txt'
を返します。バージョン3.4の新機能。
たとえば、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']