実用的なジェネレータの使用例

2024年6月13日

実用的なジェネレータの使用例として、ログファイルから特定の条件を持つ行をフィルタリングして処理する場面を挙げてみます。以下の例では、ログファイルから特定のエラーが含まれる行を抽出し、その行を処理します。

python
def filter_log(file_path, keyword):
    with open(file_path, 'r') as file:
        for line in file:
            if keyword in line:
                yield line.strip()  # ジェネレータから行を返す

# ジェネレータを作成
log_gen = filter_log('logfile.txt', 'ERROR')

# ジェネレータからエラーログを取得して出力
print("Error Log Lines:")
for log_line in log_gen:
    print(log_line)

この例では、filter_log というジェネレータ関数が定義されています。この関数は、引数 file_path で指定されたログファイルから、引数 keyword で指定されたキーワードを含む行を抽出します。with 文を使ってログファイルを開き、ファイルを一行ずつ読み込みます。その後、keyword が行に含まれている場合にはその行を yield を使ってジェネレータから返します。

その後、filter_log 関数を呼び出してジェネレータオブジェクト log_gen を作成し、for ループを使ってジェネレータからエラーログを取得して出力します。

このように、ジェネレータは大規模なログファイルなどのデータを効率的に処理する際に役立ちます。ログファイルのように、データが巨大で一度に全ての行をメモリに読み込むことが難しい場合でも、ジェネレータを使うことでメモリの使用量を最小限に抑えながら効率的にデータを処理できます。

未分類

Posted by ぼっち