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
をあなたの武器の一つとして、積極的に活用し、ファイル操作の達人を目指しましょう。
関連記事
-
Python正規表現:データ抽出からテキスト解析まで、業務を自動化する技術はじめに:なぜ今、Pythonで正規表現を学ぶべきなのか? 今回は、Pythonの正規表現について深掘りしていきます。なぜ正規表現なのでしょう
-
Pythonのpathlibで迷子の心配はもう不要!ファイルパス操作をスマートにマスターする方法Pythonのpathlibで迷子の心配はもう不要!ファイルパス操作をスマートにマスターする方法 ファイルパスを扱う作業は、プログラミングにお
-
Python コードを美しく保つ!自動整形ツール Black & autopep8 の導入と活用術はじめに Python で開発を行う際、インデントや空白、改行など、細かいコーディング規約に気を配るのは意外と手間がかかるものです。そこで今回は、Pyth
-
Pythonのimport文を徹底解剖! 開発効率を劇的に向上させるテクニック集はじめに 今回は、Pythonプログラミングにおける重要な要素であるimport文について、詳しく解説させていただきます。import文は、P
-
Python コードのボトルネックを徹底解剖! `profile` モジュールでパフォーマンス改善はじめに:なぜプロファイリングが必要なのか Python でプログラムを作成する際、多くの場合、まず正しく動作することを目指します。しかし、プログラムが複