Python glob徹底活用術:ファイル操作を自由自在に操る!

1. はじめに:なぜglobが重要なのか?ファイル操作の自動化という選択

Webサイトの制作現場では、画像の整理、ログファイルの解析、設定ファイルの管理など、ファイルの操作は日常茶飯事です。これらの作業を手作業で行うのは時間と労力がかかり、ミスも発生しやすくなります。そこで役立つのが、Pythonのglobモジュールです。

globモジュールは、指定したパターンに合致するファイルやディレクトリのパスをリスト形式で取得できる便利なツールです。 これを利用することで、例えば「特定の拡張子を持つファイルを一括で処理する」「特定の命名規則に従ったファイルを自動的にバックアップする」といった作業を、スクリプトで自動化できます。単純作業から解放され、より創造的な業務に集中できる時間を増やしましょう。本記事では、globモジュールの基本的な使い方から、現場で役立つ応用テクニックまで、詳しく解説していきます。globを使いこなして、ファイル操作の自動化を実現し、日々の業務をよりスマートにしませんか?

2. globの基本:ファイル検索の第一歩を踏み出す

globモジュールを使うには、まずインポートが必要です。

import glob

globの基本となる関数はglob.glob()です。この関数に、検索したいファイルやディレクトリのパターンを文字列で渡すと、条件に一致するパスのリストが返されます。パターンには、以下のワイルドカードを使用できます。

  • *: 0文字以上の任意の文字列にマッチします。(例: *.txt は、すべてのテキストファイルにマッチ)
  • ?: 任意の1文字にマッチします。(例: file?.txt は、file1.txt, file2.txt などにマッチ)
  • []: 角括弧内のいずれかの文字にマッチします。(例: file[0-9].txt は、file0.txt, file1.txt, …, file9.txt にマッチ)
  • [!...]: 角括弧内の文字以外にマッチします。(例: file[!0-9].txt は、filea.txt, fileb.txt などにマッチ。file0.txt, file1.txt にはマッチしません。)

例えば、現在のディレクトリにあるすべての.txtファイルを探すには、以下のコードを実行します。

import glob

text_files = glob.glob("*.txt")
print(text_files)

特定のディレクトリを指定する場合は、パターンにパスを含めます。例えば、imagesディレクトリにあるすべての.jpgファイルを探す場合は、次のようになります。

import glob

jpg_files = glob.glob("images/*.jpg")
print(jpg_files)

globを使うことで、手動でファイルを探す手間を省き、効率的にファイル操作を行うための準備ができます。

3. パターンを極める:より高度なファイル検索テクニック

globでは、複数のワイルドカードを組み合わせたり、文字クラスを利用することで、より複雑な条件でファイルを検索できます。例えば、名前がreportで始まり、その後に日付(例: report20231026)が続く.pdfファイルを検索したい場合は、次のように記述できます。

import glob

report_files = glob.glob("report[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].pdf")
print(report_files)

上記の例では[0-9]を8回繰り返していますが、より簡潔に表現するために{}を使うこともできます。ただし、{}を使うにはglob.globではなくglob.iglobを使用する必要があります。

import glob

report_files = glob.iglob("report[0-9]{8}.pdf")
for file in report_files:
    print(file)

サブディレクトリを再帰的に検索するには、glob.glob()関数のrecursive引数をTrueに設定します。この場合、パターンに**を含める必要があります。

import glob

all_txt_files = glob.glob("**/*.txt", recursive=True)
print(all_txt_files)

このコードは、現在のディレクトリ以下のすべてのサブディレクトリにある.txtファイルを検索します。globのパターンを使いこなすことで、必要なファイルを正確に、そして効率的に見つけ出すことができるようになります。

4. 実践で活かす:ファイル操作を自動化する応用例

globで取得したファイルリストは、様々なファイル操作と組み合わせて、業務を自動化するために活用できます。

例1: ファイルの一括リネーム

特定のパターンに合致するファイル名を、別の規則に従って一括で変更するスクリプトを作成できます。

import glob
import os

files = glob.glob("old_name_*.txt")

for file in files:
    new_name = file.replace("old_name_", "new_name_")
    os.rename(file, new_name)
    print(f"Renamed {file} to {new_name}")

例2: 特定の文字列を含むファイルを抽出

globでファイルリストを取得し、それぞれのファイルの内容を調べて、特定の文字列を含むファイルのみを抽出できます。

import glob

files = glob.glob("*.txt")
keyword = "important_data"

for file in files:
    with open(file, "r") as f:
        content = f.read()
        if keyword in content:
            print(f"File {file} contains the keyword.")

例3: ディレクトリ構造をコピー

あるディレクトリの構造を別の場所にコピーする際、globを使ってディレクトリを再帰的に検索し、os.makedirs()で新しいディレクトリを作成できます。

これらの例はほんの一例です。globと他のPythonのモジュールを組み合わせることで、様々なファイル操作を自動化し、作業効率を大幅に向上させることができます。

5. glob利用時の注意点とトラブルシューティング

globを使う際には、いくつかの注意点があります。

  • パスの区切り文字: Windowsではパスの区切り文字として\が使われますが、Pythonの文字列では\はエスケープ文字として扱われます。そのため、Windows環境でglobを使う場合は、\\\と記述するか、パスをraw文字列として記述する必要があります。(例: r"C:\path\to\file.txt")
  • 大量のファイル: 大量のファイルを検索する場合、globの処理に時間がかかることがあります。その場合は、パターンをより具体的に絞り込むか、より高速なファイル検索ライブラリの利用を検討してください。
  • 権限: globは、ファイルシステム上のファイルやディレクトリにアクセスするため、適切な権限が必要です。権限がないファイルやディレクトリを検索しようとすると、エラーが発生することがあります。

もしglobが期待通りに動作しない場合は、以下の点を確認してください。

  • パターンに誤りがないか。
  • ファイルやディレクトリが存在するか。
  • 実行しているスクリプトに、必要な権限があるか。
  • OSの環境変数が正しく設定されているか。(特にパスに関する環境変数)

6. まとめ:globを武器に、ファイル操作の効率化を追求しよう

本記事では、Pythonのglobモジュールの基本的な使い方から応用テクニック、注意点までを解説しました。globを使いこなすことで、ファイル操作の自動化を実現し、日々の業務をより効率的に進めることができます。Web制作の現場では、様々なファイルの操作が求められます。globをあなたの武器の一つとして、積極的に活用し、ファイル操作の達人を目指しましょう。

関連記事