Pythonのglobについて

Pythonのglobについて

Pythonのglobモジュールは、ファイルシステム内のパス名を特定のパターンにマッチさせるための機能を提供するモジュールです。
globは、Unixシェルのワイルドカード(*, ?, []など)を使用してファイルやディレクトリを検索します。
特に、特定の拡張子を持つファイルや、特定のパターンに一致するファイルを検索するのに便利です。

globモジュールの基本的な使い方

globモジュールを使用するには、まずインポートします。

import glob

次に、glob.glob()関数を使って、パターンにマッチするファイルのリストを取得します。

import glob

# カレントディレクトリ内のすべてのPythonファイルを取得
python_files = glob.glob('*.py')
print(python_files)

この例では、カレントディレクトリにあるすべての.py(Python)ファイルを検索し、そのリストをpython_files変数に格納します。

ワイルドカードの使用

  • *:任意の文字列に一致します(空の文字列も含む)。
  • ?:任意の1文字に一致します。
  • [abc]:a, b, cのいずれか1文字に一致します。
  • [!abc]:a, b, c以外の任意の1文字に一致します。
# 任意の文字列に一致するファイルを取得
all_files = glob.glob('*')

# 任意の1文字に一致するファイルを取得
single_char_files = glob.glob('?.txt')

# 'a', 'b', 'c'のいずれか1文字を含むファイルを取得
abc_files = glob.glob('[abc]*.txt')

# 'a', 'b', 'c'以外の任意の1文字を含むファイルを取得
not_abc_files = glob.glob('[!abc]*.txt')

再帰的な検索

Pythonのglobモジュールには、再帰的にディレクトリを検索するためのオプションもあります。
glob.glob()関数の代わりにglob.iglob()を使うこともできますが、通常のglob()関数でもrecursiveオプションをTrueに設定することで再帰的な検索が可能です。

# 再帰的にすべてのPythonファイルを取得
recursive_python_files = glob.glob('**/*.py', recursive=True)
print(recursive_python_files)

この例では、カレントディレクトリから再帰的にすべてのサブディレクトリ内のPythonファイルを検索します。

globとos.pathの組み合わせ

globモジュールはos.pathモジュールと組み合わせて使用されることが多いです。
os.pathモジュールは、パスの操作に役立つ多くの関数を提供します。
たとえば、ファイル名を取得した後、それらのパスを絶対パスに変換することができます。

import glob
import os

# カレントディレクトリ内のすべてのPythonファイルを取得
python_files = glob.glob('*.py')

# 絶対パスに変換して表示
absolute_paths = [os.path.abspath(file) for file in python_files]
print(absolute_paths)

globモジュールの利点

  • シンプルで直感的なファイル検索が可能です。
  • ワイルドカードを使用して柔軟にファイルをフィルタリングできます。
  • 再帰的なディレクトリ検索もサポートしています。

globモジュールを使うことで、特定のパターンに一致するファイルを簡単に検索し、処理することができます。
ファイルの整理や特定のファイルを処理するスクリプトを書く際に非常に便利です。