
Pythonでファイルやフォルダを扱う際、特定のパターンに一致するファイルをまとめて取得したいことがよくあります。
たとえば、「フォルダ内のすべての画像ファイルを一括で処理したい」「特定の拡張子のファイルだけを探したい」といった場合です。
そんな時に便利なのが、標準ライブラリのglobモジュールです。
この記事では「globとは何か?」「どんな場面で役立つのか?」について使い方や具体例を交えてわかりやすく解説していきます。
globとは
globは「ファイル名のパターンマッチング」を行うためのPython標準ライブラリです。
たとえば「*.txt
」というパターンを指定すれば、カレントディレクトリ内の全ての「.txt」ファイルをリストアップできます。
ファイル名にワイルドカード( や ? など)を使って柔軟に検索できるのが特徴です。
インストール不要で、Pythonに標準で含まれているため、下記のように指定すれば簡単に使えます。
1 2 | import glob |
どんな時に便利?
globは次のような場面でとても便利です:
- フォルダ内の特定の拡張子のファイルだけを一括取得したい
- 名前に特定のパターンを含むファイルだけを探したい
- フォルダ構成を再帰的に探索したい
- バッチ処理やデータ前処理時にまとめてファイルを読み込みたい
たとえば、画像認識の学習データ用の画像ファイルだけを読み込みたい時や、毎日出力されるログファイルを日付でまとめて処理したい時などに活躍します。
使い方
基本的な使い方
まずはカレントディレクトリ内の.txt
ファイルをすべて取得する基本例です。
1 2 3 4 5 | import glob txt_files = glob.glob('*.txt') print(txt_files) |
このコードでは、glob.glob('*.txt')
がカレントディレクトリ内のtxt
ファイル名のリストを返します。
たとえば、フォルダ内にnote.txt
とdata.txt
があった場合、次のような結果になります:
1 2 | ['note.txt', 'data.txt'] |
特定のフォルダを指定する
次に、特定のフォルダ内のファイルを取得する例です。
たとえば「documents
フォルダ内の全ファイル」を取得したい場合は次のように書きます:
1 2 3 4 5 | import glob files = glob.glob('documents/*') print(files) |
これで、documents
フォルダ内の全ファイルがリストで取得できます。
取得できるものは、ファイルだけでなくフォルダも含まれます。
ワイルドカードの使い方
globでは次のワイルドカードが使えます:
*
:任意の文字列(0文字以上)に一致?
:任意の1文字に一致[]
:指定した文字のいずれかに一致
例1:画像ファイル(pngまたはjpg)を取得
1 2 3 4 5 | import glob image_files = glob.glob('images/*.png') + glob.glob('images/*.jpg') print(image_files) |
*.png
と*.jpg
のパターンを組み合わせることで、pngとjpgの両方のファイルを取得できます。例2:ファイル名の一部が特定の文字で終わるファイルを取得
1 2 3 4 5 | import glob log_files = glob.glob('logs/log_2025-06-??.txt') print(log_files) |
logs
フォルダ内でlog_2025-06-01.txt
〜log_2025-06-31.txt
のようなファイルを取得できます。??
の部分は任意の2文字に一致します。
サブフォルダ(再帰的に取得)
サブフォルダも含めて全てのファイルを取得したい場合は、**
を使います(Python 3.5以上推奨)。
recursive=True
も指定します。
1 2 3 4 5 | import glob all_files = glob.glob('documents/**/*.txt', recursive=True) print(all_files) |
このコードでは、documents
フォルダ以下の全階層からtxt
ファイルを取得します。
たとえばdocuments
の中に2025/notes.txt
がある場合、それもリストに含まれます:
1 2 | ['documents/notes.txt', 'documents/2025/notes.txt'] |
globとos.listdirの違い
初心者が混乱しやすいのが、os.listdir
とglobの違いです。
os.listdir | glob.glob |
---|---|
フォルダ内の全ファイル・フォルダ名を取得 | パターン指定してファイル名を取得 |
サブフォルダ探索には対応していない | ** とrecursiveでサブフォルダ探索可能 |
ワイルドカードは使えない | ワイルドカードが使える |
パターンで絞り込みたい場合はglobが便利です。
逆に「とりあえずフォルダ内の全ファイル名を取得したい」だけならos.listdir
でもOKです。
まとめ
globはファイル名のパターンマッチングが簡単にできる標準ライブラリです。
こんな場面で特に役立ちます:
- 特定の拡張子のファイルだけを一括取得したい
- フォルダ構成を再帰的に探索したい
- 名前にルールがあるファイル群をまとめて処理したい
しかもインストール不要なので、Pythonの標準機能だけで完結します。
ぜひデータ前処理やバッチ処理の時に活用してみてください。
作業がぐっと楽になりますよ。