Pythonのファイル操作を高速化!パフォーマンス改善のコツ
生徒
「先生、Pythonでファイルを扱うときに、処理が遅くなることがあります。どうしたら速くできますか?」
先生
「Pythonでのファイル操作は便利ですが、使い方次第で速度が大きく変わります。いくつかのコツを押さえるとパフォーマンスを改善できます。」
生徒
「具体的にはどんな方法がありますか?」
先生
「それでは、基本から応用まで順に見ていきましょう。」
1. バッファリングを活用する
ファイルを開くとき、Pythonは内部でバッファと呼ばれるメモリ領域を使ってデータを一時的に保持します。小さなデータを少しずつ読み書きすると、その都度ハードディスクにアクセスするため時間がかかります。open関数のbufferingパラメータを調整すると、一度にまとめて読み書きできるため効率が上がります。
with open("large_file.txt", "r", buffering=8192) as f:
data = f.read()
ポイント:
bufferingを大きくするほど、まとめて読み込む量が増える- 少ないアクセスで済むので、ディスクへの負荷が軽減
2. 一度に全て読み込まずに分割処理
大きなファイルを一度に読み込むとメモリを大量に消費します。行単位で処理することで、効率的にパフォーマンスを改善できます。
with open("large_file.txt", "r", encoding="utf-8") as f:
for line in f:
process(line)
ポイント:
- ファイル全体を
read()で読み込まない - メモリ消費を抑えつつ、逐次処理が可能
3. バイナリモードで読み書きする
テキストモードではPythonが文字コード変換を行うため、処理が遅くなる場合があります。バイナリモード(rbやwb)を使うと、変換処理を省略でき、高速化につながります。
with open("image.jpg", "rb") as f:
data = f.read()
with open("copy.jpg", "wb") as f:
f.write(data)
ポイント:
- 文字コード変換が不要なファイルはバイナリで扱う
- 特に画像や動画、大きなCSVファイルに有効
4. with構文でファイル管理を簡潔に
Pythonのwith構文を使うことで、ファイルを自動で閉じることができます。手動でclose()を呼ぶよりも安全で、余計な処理時間やエラーを防ぎます。
with open("data.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
ポイント:
- ファイルのオープン・クローズを自動化
- 例外発生時でも安全にリソースを解放
5. pandasを活用して大規模データを効率処理
CSVやExcelなどの大規模データを扱う場合、Python標準のopenよりもchunksizeを使うと、分割読み込みが可能です。
import pandas as pd
chunksize = 10000
for chunk in pd.read_csv("large_data.csv", chunksize=chunksize):
process(chunk)
ポイント:
- 一度に全データを読み込まない
- 分割処理でメモリ消費を抑える
- pandasの内部最適化で高速読み込み
6. ファイルパスの操作を効率化
複数のファイルを扱う場合、文字列でパスを操作するよりもpathlibを使うと、OSに依存せず高速で処理できます。
from pathlib import Path
for file in Path("data_folder").glob("*.txt"):
with open(file, "r", encoding="utf-8") as f:
process(f.read())
ポイント:
- ファイル一覧取得やパス結合が簡単
- 文字列操作のオーバーヘッドを削減
7. まとめ:高速化のポイント
Pythonでのファイル操作を高速化するためには、以下の点を意識すると効果的です。
- バッファリングを適切に設定する
- 大きなファイルは分割して逐次処理する
- 文字コード変換が不要ならバイナリモードを使う
- with構文でファイル管理を簡単にする
- pandasやpathlibなどのライブラリを活用する
これらを組み合わせることで、Pythonのファイル操作が効率化され、処理時間を大幅に短縮できます。