Tips
今日の開発Tips(2025-08-13)
大量のログファイル処理で困っていませんか?ファイルサイズが大きく、メモリ不足になることも…。本Tipsでは、Pythonの`mmap`モジュールを使って、巨大なログファイルを効率的に処理する方法を紹介します。メモリ使用量を抑えつつ、高速にログ解析を行うことができます。
巨大ログファイルの効率的な処理:mmapモジュール活用
Pythonのmmapモジュールを使うと、ファイルをメモリマップし、ファイル全体をメモリに読み込むことなく、必要な部分だけをアクセスできます。これにより、巨大なログファイルの処理でもメモリ不足を防ぎ、高速な処理を実現できます。
import mmap
import os
def process_log_file(filepath):
with open(filepath, 'r+b') as f: # バイナリモードで開く
with mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ) as mm: # ファイル全体をメモリマップ
for line in iter(mm.readline, b''): # 改行コードを基準に一行ずつ読み込む
# ログ行の処理
processed_line = line.decode('utf-8').strip() # バイト列を文字列に変換し、空白を除去
print(processed_line)
# ログファイルのパス
log_file_path = "huge_log.txt"
# ログファイルの処理
process_log_file(log_file_path)
注意点:
- ファイルをバイナリモード(
'r+b')で開く必要があります。 decode()メソッドで文字コードを指定する必要があります。ログファイルの文字コードに合わせて変更してください。mmapオブジェクトは、ファイルが閉じられるまで有効です。with文を使って確実に解放しましょう。- メモリマップできるファイルサイズにはOSの制限があります。非常に巨大なファイルの場合は、さらに工夫が必要になる可能性があります。
おすすめポイント:
- メモリ効率が良い:ファイル全体をメモリに読み込まないので、メモリ不足を防げます。
- 高速な処理:必要な部分だけをアクセスするため、処理速度が向上します。
- 読み込みと書き込みの両方が可能:
mmap.ACCESS_WRITEを指定することで、ファイルの書き込みも可能です。