glob#
基本的な使い方#
使用できる特殊文字#
以下の特殊文字を使用して複数パターンの文字列マッチでパス取得可能。
- 長さ0文字以上の任意の文字列にマッチ:
*
- 例:
glob("path/*.log")
- 例:
- 任意の一文字にマッチ:
?
- 例:
glob("path/???.log")
- 例:
- 括弧の中の文字列から一文字にマッチ:
[]
- 例:
glob("path/Router_[0-9].log")
- 例:
Tip
特殊文字のエスケープは[]
で囲む。
例 : glob("path/[*].log")
もしくは glob.escape()
でも可能です
例 : `glob.escape("path/**.log")
再帰的に取得#
バージョン 3.5 で変更: "**" を使った再帰的な glob がサポートされました。
path の指定に**
使用し、また引数にrecursive=True
使うと、あらゆるファイルや0個以上のディレクトリ
およびサブディレクトリにマッチ
**
を使うとあらゆる中間ディレクトリに対応してマッチさせることが可能。
特定のディレクトリに含まれるすべてのファイル、ディレクトリの一覧を取得したい場合は以下のように記述。
reモジュール併用#
glob 自体で使える正規表現は少ないため、glob()
で**
と引数recursive=True
を使ってすべてのファイル、
ディレクトリを再帰的に集め、if 文と
re`モジュールで抽出する方法で補う。
import re
from glob import glob
# リスト内包表記も併用
[x for x in glob('temp/**', recursive=True) if re.search('Router\d+\.log', x)])
ディレクトリ・ファイル名のみ#
ディレクトリ名のみ取得したい場合は、**
の末尾にディレクトリの区切り文字をつける。
ファイル名のみを取得したい場合は、os.path.isfile()
でファイルかどうかを判定。
Tip
OS に依存しない区切り文字は os.sep
にて記述
例:(glob(os.path.join('path', '**' + os.sep + 'test.log', recursive=True)))
イテレータで一覧を取得: iglob()#
globf.iglob()
を使用するとイテレーターをかえします。recursive=True
も指定可能です。