Pythonでグロブパターンを使って特定のファイルを効率よく検索する方法

この記事では、Pythonを使用してグロブパターン(ワイルドカード)を使って特定のファイルを検索する手法について解説します。Pythonの`glob`ライブラリの基本的な使い方から、詳細なオプション、応用例に至るまで網羅的に説明します。

目次

はじめに: グロブパターンとは

グロブパターン(ワイルドカード)は、特定の文字列パターンにマッチするファイルやディレクトリを検索するための簡単な方法です。Unix系OSでよく使用されるもので、Pythonでも`glob`というライブラリを通じて利用可能です。

基本的な使い方

`glob`ライブラリはPython標準ライブラリに含まれているため、追加のインストールは不要です。

簡単な例

import glob

# 現在のディレクトリに存在する全ての.txtファイルを検索
for filename in glob.glob('*.txt'):
    print(filename)

上記のコードでは、現在のディレクトリに存在する全ての`.txt`ファイルを検索しています。

詳細なオプション

`glob`ライブラリは多くのオプションを持っています。

再帰的な検索

import glob

# 再帰的に全ての.txtファイルを検索
for filename in glob.glob('**/*.txt', recursive=True):
    print(filename)

`recursive=True`オプションを使うことで、サブディレクトリも含めて検索を行います。

応用例

応用例1: ファイルサイズのチェック

import glob
import os

# .txtファイルでサイズが1KB以上のものを検索
for filename in glob.glob('*.txt'):
    if os.path.getsize(filename) >= 1024:
        print(filename, "is larger than 1KB")

応用例2: 特定のテキストを含むファイルの検索

import glob

# "important"というテキストを含む.txtファイルを検索
for filename in glob.glob('*.txt'):
    with open(filename, 'r') as f:
        if 'important' in f.read():
            print(f"{filename} contains the word 'important'")

応用例3: ファイルの更新日時によるフィルタ

import glob
import os
import time

# 24時間以内に更新された.txtファイルを検索
one_day_ago = time.time() - 24*60*60  # 24時間前のUnix時間
for filename in glob.glob('*.txt'):
    if os.path.getmtime(filename) > one_day_ago:
        print(f"{filename} was modified within the last 24 hours")

まとめ

Pythonの`glob`ライブラリを用いれば、効率よく特定の条件にマッチするファイルを検索できます。再帰的な検索や、ファイルサイズ、特定のテキストを含むかなど、多様な条件での検索が可能です。これを機に、Pythonでのファイル操作の幅を広げてみてはいかがでしょうか。

コメント

コメントする

目次