はじめに
Pythonでプログラミングをしていると、ファイルやディレクトリを扱う機会が多くあります。
特に特定のパターンに一致するファイルを検索したい場合、globモジュールが便利です。
globモジュールは、ファイル名パターンマッチングを簡単に行うことができるPython標準ライブラリです。
標準ライブラリ(standard library)とは、プログラミング言語の処理系に標準で付属するライブラリ。部品化されたプログラムなどが収録されており、開発者は言語仕様の一部のようにすべての実行環境に存在する前提で利用することができる。
引用元:https://e-words.jp/w/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA.html
ファイル名の一部に「*」や「?」などのワイルドカードを用いて、柔軟にファイル検索ができます。
ワイルドカードとは
「*」(アスタリスク):0個以上の任意の文字列にマッチします。
「?」(クエスチョンマーク):任意の1文字にマッチします。
「[]」(角括弧):括弧内の任意の1文字にマッチします。
なぜファイル検索にglobをつかうのか
理由は以下の三つです。
1.簡単な構文:複雑なファイル操作も数行のコードで実装できる。
2.柔軟性:ワイルドカードを用いて多様な検索パターンを指定できる。
3.効率性:大量のファイルを素早く検索できる。
では早速、globの使い方を見ていきましょう。
globの基本的な使い方
まずglobモジュールを使うには、以下のようにインポートします。
import glob
globモジュールの中心となる関数は、glob.glob()
です。
この関数は、指定されたパターンに一致するすべてのパス名のリストを返します。
戻り値がリストであることの重要性
1.glob.glob()
はマッチしたすべてのファイルパスをリスト型で返します。
2.一つのパターンで複数のファイルにマッチした場合、それらすべてのファイルパスがリスト要素として含まれます。
3.マッチしたファイルに対して繰り返し処理が可能です。
4.リスト操作を直接適用することが可能です。
例えば、カレントディレクトリ内のすべてのPythonファイル(.py)を検索したい場合、以下のようにします。
python_files = glob.glob('*.py')
print(pyton_files)
このコードを実行すると、カレントディレクトリ内のすべての.pyファイルのリストが表示されます。
主なワイルドカードの使用
import glob
# 1. '*' : 0個以上の任意の文字列にマッチ
python_files = glob.glob('*.py')
print("Pythonファイル:", python_files)
# 2. '?' : 任意の1文字にマッチ
single_char_files = glob.glob('file?.txt')
print("1文字のワイルドカード:", single_char_files)
# 3. '[]' : 括弧内の任意の1文字にマッチ
range_files = glob.glob('file[1-3].txt')
print("文字範囲指定:", range_files)
# ボーナス: 複数のワイルドカードの組み合わせ
complex_files = glob.glob('*_[0-9]*.pdf')
print("複合パターン:", complex_files)
各ワイルドカードの説明:
*: 0個以上の任意の文字列にマッチします。
例えば、*.py は全ての Python ファイルにマッチします。
?: 任意の1文字にマッチします。
例えば、file?.txt は file1.txt, fileA.txt などにマッチしますが、file10.txt にはマッチしません。
[]: 括弧内の任意の1文字にマッチします。
範囲指定も可能です。例えば、file[1-3].txt は file1.txt, file2.txt, file3.txt にマッチします。
ボーナスの例では、これらのワイルドカードを組み合わせて、より複雑なパターンマッチングを行っています。
重要なポイント:
glob.glob() は常にリストを返します。マッチするファイルがない場合は空のリスト [] が返されます。
返されるリストの各要素は文字列型のファイルパスです。
実践的な例
特定のディレクトリ内のファイル一覧を取得
特定のディレクトリ内のファイルを検索したい場合は、パスを指定します。
import glob
import os
pdf_files = glob.glob(os.path.join('Documents', '*.pdf'))
for file in pdf_files:
print(file)
まとめ
glob
モジュールを使うことで、Pythonでのファイル検索が容易になります。
その利点は、
- 簡単なコードでファイル検索ができる
- ワイルドカードを使って柔軟な検索パターンを指定できる
- 大量のファイルを効率的に処理できる
基本的な使用シーンとしては:
- 特定の拡張子を持つファイルの検索
- 特定のパターンに一致するファイル名の検索
- ディレクトリ内のファイル一覧の取得
globモジュールは、これらの基本的なファイル操作を簡単に行えるだけではなく、複雑なファイル処理タスクの基礎にもなるので、ぜひ覚えておきたいライブラリです。きsき