pythonのglob.glob/正規表現やワイルドカード

Pythonのglob.globの使い方

Python glob globについて

Pythonのglobは、ディレクトリ内のファイル名をワイルドカードで指定して取得するための関数です。

Pythonのglobの使い方

Pythonのglobの使い方

globの基本的な使い方は、以下のとおりです。

import glob

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

for filename in filenames:
    print(filename)

このコードを実行すると、以下の出力が表示されます。

main.py
sample.py

globは、以下のワイルドカードをサポートしています。

  • * : 任意の文字列を1文字以上含むファイル
  • ? : 任意の文字を1文字含むファイル
  • [abc] : 指定された文字列のいずれかを含むファイル
  • [a-z] : 指定された文字範囲のいずれかを含むファイル

globは、以下のオプションを指定できます。

  • recursive : サブディレクトリも含めて検索する
  • ignorecase : 大文字と小文字を区別しない
  • path : 検索対象のディレクトリを指定

例えば、以下のコードは、カレントディレクトリとそのサブディレクトリ内のすべての.pyファイルを取得します。

import glob

# カレントディレクトリとそのサブディレクトリ内のすべての.pyファイルを取得する
filenames = glob.glob("**/*.py", recursive=True)

for filename in filenames:
    print(filename)

このコードを実行すると、以下の出力が表示されます。

main.py
sample.py
sub/sub_main.py
sub/sub_sample.py

globは、ファイル名を取得するための便利な関数です。ゲーム開発やデータ分析など、さまざまな場面で利用できます。

条件に一致するファイルやディレクトリの一覧を取得する

条件に一致するファイルやディレクトリの一覧を取得する

ワイルドカードよりも、さらに複雑な条件を指定できる正規表現を使用して、条件に一致するファイルやディレクトリを取得することができます。

import glob

# 正規表現
regex = r"(main|sample)\.py"

# ファイル名の一覧を取得
filenames = glob.glob(regex)

# ファイル名を表示
for filename in filenames:
    print(filename)

このコードは、カレントディレクトリ内のすべての、ファイル名が「main.py」または「sample.py」であるファイルを取得します。

正規表現の説明

  • (main|sample) : ファイル名が「main」または「sample」である
  • .py : 拡張子が「.py」である

出力

main.py
sample.py

より複雑な条件を満たすファイル名を取得するには、正規表現を組み合わせて使用します。

例えば、以下のコードは、カレントディレクトリ内のすべての、ファイル名が「main」で始まり、拡張子が「.py」であるファイルを取得します。

import glob

# 正規表現
regex = r"^main\.py$"

# ファイル名の一覧を取得
filenames = glob.glob(regex)

# ファイル名を表示
for filename in filenames:
    print(filename)

このコードの出力は、以下のとおりです。

main.py

以下に、globを使って正規表現にマッチしたファイル名を取得するサンプルをいくつかご紹介します。

  • ファイル名に「main」を含むファイルを取得する
import glob

# 正規表現
regex = r"*main*"

# ファイル名の一覧を取得
filenames = glob.glob(regex)

# ファイル名を表示
for filename in filenames:
    print(filename)
  • ファイル名が数字で始まるファイルを取得する
import glob

# 正規表現
regex = r"^[0-9]\d*\.py$"

# ファイル名の一覧を取得
filenames = glob.glob(regex)

# ファイル名を表示
for filename in filenames:
    print(filename)
  • ファイル名が特定の文字列で終わるファイルを取得する
import glob

# 正規表現
regex = r".*\.py$"

# ファイル名の一覧を取得
filenames = glob.glob(regex)

# ファイル名を表示
for filename in filenames:
    print(filename)