(最終更新月:2023年6月)
✔このような方へ向けて書かれた記事となります
「Pythonのglobモジュールって何ができるのだろうか?」
「globモジュールの使い方が知りたい」
「globモジュールを活用した実例が見たい」
✔当記事を通じてお伝えすること
- Pythonのglobモジュールの概要
- globモジュールの使い方やその活用法
- globモジュールを用いた実践的な例
当記事では、Pythonのglobモジュールの基本概念から、さまざまなオプションを活用した実用的な使い方まで、具体的なケースを交えて詳細に解説しています。
ぜひ最後までご覧ください。
Pythonのglobモジュールとは?
こちらでは、「globモジュール」についてお伝えしていきます。
globモジュールを学ぶことで、特定のパターンにマッチするファイルやディレクトリを効率的に取り扱えるようになるでしょう。
- globモジュールとは?
- globモジュールでできること
globモジュールとは?
globモジュールはPythonの標準ライブラリの一部です。
指定したパターンにマッチするファイルやディレクトリの名前を取得するためのもの。
特定の拡張子を持つファイルや、特定の名前を持つディレクトリを一括して取得することが可能になります。
これにより、大量のファイルを扱う際の処理を効率化できるのです。
globモジュールでできること
globモジュールは、ファイルのパターンマッチングやディレクトリの走査など、ファイルシステムの操作を容易にするためのツールです。
以下に、globモジュールの主な機能とそれぞれの例を挙げます。
- ファイルのパターンマッチング
- ディレクトリの再帰的な走査
- ワイルドカードを使用したファイルのフィルタリング
ファイルのパターンマッチング
import glob
# 指定したディレクトリ内のすべてのtxtファイルを取得する
txt_files = glob.glob('path/to/directory/*.txt')
print(txt_files)
ディレクトリの再帰的な走査
import glob
# 指定したディレクトリ以下のすべてのpyファイルを再帰的に取得する
py_files = glob.glob('path/to/directory/**/*.py', recursive=True)
print(py_files)
ワイルドカードを使用したファイルのフィルタリング
import glob
# 指定したディレクトリ内のファイルから、特定のパターンに一致するファイルを取得する
files = glob.glob('path/to/directory/file_*.txt')
print(files)
glob()の基本的な使い方
globモジュールの主要な機能であるglob()関数の基本的な使い方についてお伝えしていきます。
この関数を使いこなせると、特定のパターンにマッチするファイルを効率的に操作できるでしょう。
- globモジュールをインポートする方法
- glob()関数の紹介と使用例
- ファイル名だけを取得する方法
globモジュールをインポートする方法
Pythonでは、使用するモジュールは、まずインポートしなければなりません。
globモジュールをインポートするためには、以下のようにimport
ステートメントを使用してください。
import glob
これで、globモジュールの提供する関数を使用することができます。
glob()関数の紹介と使用例
globモジュールのglob()メソッドは、引数に与えたパターンにマッチするファイルやディレクトリのパスをリストで返す関数です。
例えばすべてのtxtファイルを取得したい場合は、以下のように使用します。
import glob
txt_files = glob.glob('*.txt')
print(txt_files)
上記のコードを実行すると、カレントディレクトリに存在する全ての.txt
ファイルのリストが表示されます。
ファイル名だけを取得する方法
glob関数を活用して、ファイル名だけを取得できます。
osモジュールのos.path.basename関数と組み合わせましょう。
import glob, os
txt_files = glob.glob('*.txt')
for file in txt_files:
print(os.path.basename(file))
このコードでは、全ての.txt
ファイルのファイル名(ディレクトリ部分を除いた名前)だけが表示されます。
glob()で使える特殊文字
次に、glob()関数で使用できる特殊文字について解説します。
これらの特殊文字を使用することで、より複雑なパターンマッチングを行うことが可能になります。
- 任意の文字列:*
- 任意の1文字:?
- 特定の1文字:[]
- 特殊文字のエスケープ
任意の文字列:*
*
は任意の文字列(0文字以上の任意の文字列)にマッチします。
例えば、*.txt
とすると、’.txt’で終わる全てのファイルをマッチさせることが可能です。
import glob
# カレントディレクトリ内のすべてのtxtファイルを取得する
txt_files = glob.glob('*.txt')
print(txt_files)
任意の1文字:?
?
は、任意の1文字にマッチする特殊文字。
例えばdata?.txtとすると、’data1.txt’, ‘data2.txt’, ‘dataX.txt’など、’data’に続く任意の1文字と’.txt’で終わる全てのファイルを抽出できます。
import glob
# カレントディレクトリ内のdata?.txtにマッチするファイルを取得する
matched_files = glob.glob('data?.txt')
print(matched_files)
特定の1文字:[]
[]
は、括弧内のいずれか1文字にマッチするもの。
例えばdata[12].txtとすると、’data1.txt’と’data2.txt’にマッチします。
import glob
# カレントディレクトリ内のdata[12].txtにマッチするファイルを取得する
matched_files = glob.glob('data[12].txt')
print(matched_files)
特殊文字のエスケープ
特殊文字を普通の文字として扱いたい場合は、\
でエスケープしましょう。
data\*.txtとすると、’data*.txt’という名前のファイルだけをマッチさせられます。
import glob
# カレントディレクトリ内のdata*.txtにマッチするファイルを取得する
matched_files = glob.glob('data\\*.txt')
print(matched_files)
応用的な検索方法
基本的なパターンマッチングだけでなく、glob()関数にはさまざまな応用的な検索方法が存在します。
ここではそのいくつかを紹介します。
- 再帰的検索:引数recursive
- ディレクトリ名だけを取得する方法
- 正規表現による条件指定
- イテレータで一覧を取得:iglob()
- 上位階層のファイルを取得する方法
再帰的検索:引数recursive
glob()
関数には再帰的にファイルを検索する機能があります。
**
をパターンとして使用し、recursive=True
を指定しましょう。
全てのサブディレクトリが対象になります。
import glob
all_txt_files = glob.glob('**/*.txt', recursive=True)
このコードは、カレントディレクトリとそのすべてのサブディレクトリから、’.txt’で終わる全てのファイルを検索します。
ディレクトリ名だけを取得する方法
glob()関数は、ファイルだけでなくディレクトリも検索対象とすることが可能。
ディレクトリだけを検索対象にするには、パターンの最後に/
を追加します。
import glob
directories = glob.glob('*/')
このコードは、カレントディレクトリにある全てのディレクトリを検索します。
正規表現による条件指定
残念ながらglob()
関数は、正規表現を直接サポートしていません。
しかし、特殊文字を用いてある程度のパターンマッチングは可能です。
また、更に高度な条件を指定したい場合には、glob()
関数で取得した結果をre
モジュール(Pythonの正規表現モジュール)でフィルタリングするという手法もあります。
import glob
import re
# 正規表現パターンにマッチするファイルを取得する
pattern = r'^[a-zA-Z]+\d{2}\.txt$' # ファイル名が英字の後に2桁の数字、拡張子が.txtのパターン
matched_files = [file for file in glob.glob('*') if re.match(pattern, file)]
print(matched_files)
イテレータで一覧を取得:iglob()
大量のファイルを扱う場合、glob関数よりも、iglob()関数が効率良い場合があります。
なぜなら全ての結果を一度にメモリに読み込むのではなく、iglob()関数では、結果をひとつずつ返すからです。
import glob
for txt_file in glob.iglob('*.txt'):
print(txt_file)
上位階層のファイルを取得する方法
..
を使用すると、一つ上のディレクトリを指定できます。
例えば、一つ上のディレクトリの全てのtxtファイルを取得するには、以下のようにします。
import glob
parent_txt_files = glob.glob('../*.txt')
まとめ
当記事では、Pythonのglobモジュールについて学習してきました。
globモジュールは、一見すると単純なモジュールですが、実際には非常に強力で多機能です。
- 基本的なパターンマッチングから、再帰的な検索、特殊文字の使用、イテレータを用いた一覧取得など、さまざまな機能を持つ
- globモジュールはPythonの標準ライブラリの一部で、ファイルやディレクトリの検索を簡単におこなえる
- glob()関数は、シェルスタイルのワイルドカードを用いたパターンマッチングをサポートしており、非常に便利
- 再帰的な検索やイテレータを用いた一覧取得といった高度な機能も備えている
globモジュールを使いこなして、さまざまなファイル操作に役立ててください。