Tips

今日の開発Tips(2025-08-15)

Pythonで大量のファイルを処理する際に、ファイルのオープンとクローズのオーバーヘッドを減らし、パフォーマンスを向上させるテクニックを紹介します。 `with`文とファイルオブジェクトの繰り返し処理を組み合わせることで、ファイルのオープンとクローズを最小限に抑え、効率的に処理できます。これは特に、小さなファイルを多数扱う場合に効果的です。

大量ファイル処理におけるファイルI/Oの効率化

大量のファイルを処理する場合、ファイルのオープンとクローズは、処理時間全体に大きな影響を与える場合があります。with文とファイルオブジェクトのイテレータ機能を組み合わせることで、このオーバーヘッドを削減できます。

import glob

def process_files(directory):
  """ディレクトリ内の全てのテキストファイルを読み込み、行数をカウントする"""
  total_lines = 0
  for filename in glob.glob(f"{directory}/*.txt"):
    with open(filename, 'r') as f:
      for _ in f:  # ファイル全体を読み込むことなく、行ごとにイテレート
        total_lines += 1
  return total_lines

# 使用例
directory_path = "path/to/your/files"  # 処理対象のディレクトリへのパスを指定
total_lines = process_files(directory_path)
print(f"Total lines in all files: {total_lines}")

注意点:glob.globはワイルドカードを用いてファイル名を検索する関数です。path/to/your/filesの部分には、実際に処理したいファイルのあるディレクトリのパスを指定してください。ファイルが非常に大きい場合は、メモリ消費に注意が必要です。その場合は、より高度なチャンク読み込み手法を検討する必要があります。

おすすめポイント:この方法はシンプルで理解しやすく、多くの場合で効果を発揮します。大量の小さなファイルを処理する際に、大幅なパフォーマンス改善が期待できます。