カテゴリ: Python 更新日: 2025/12/16

Pythonで大きなファイルを効率的に処理する方法!メモリ効率を考えた読み書き入門

Pythonで大きなファイルを効率的に処理する方法(メモリ効率を考慮)
Pythonで大きなファイルを効率的に処理する方法(メモリ効率を考慮)

先生と生徒の会話形式で理解しよう

生徒

「先生、Pythonでとても大きなファイルを扱うとき、普通に読み込むとパソコンが重くなるのですが、どうすれば効率よく処理できますか?」

先生

「それは良い質問です。大きなファイルを一度に全部メモリに読み込むと、パソコンのメモリがいっぱいになり、処理が遅くなります。こういう場合は、少しずつファイルを読み込む方法を使うと効率的です。」

生徒

「少しずつ読み込むってどういうことですか?」

先生

「Pythonではfor文で行単位に読み込んだり、read(size)でバイト単位に読み込むことができます。これにより、必要な分だけメモリに乗せて処理できるんです。」

生徒

「なるほど!具体的なコード例はありますか?」

先生

「もちろんです。それでは、順に見ていきましょう。」

1. 大きなファイルを行ごとに処理する方法

1. 大きなファイルを行ごとに処理する方法
1. 大きなファイルを行ごとに処理する方法

テキストファイルを一行ずつ処理する方法です。行ごとに処理するので、ファイル全体を一度に読み込む必要がありません。


with open("large_file.txt", "r", encoding="utf-8") as file:
    for line in file:
        line = line.strip()
        print(line)

ポイント:

  • for line in fileで1行ずつ読み込む
  • strip()で余計な空白や改行を削除
  • 大きなファイルでもメモリを節約して処理可能

2. read(size)でバイト単位に読み込む方法

2. read(size)でバイト単位に読み込む方法
2. read(size)でバイト単位に読み込む方法

ファイルがテキストだけでなくバイナリの場合、read(size)で少しずつ読み込むと便利です。sizeは読み込むバイト数です。


with open("large_file.bin", "rb") as file:
    while True:
        chunk = file.read(1024)  # 1KBずつ読み込む
        if not chunk:
            break
        print("読み込んだデータの長さ:", len(chunk))

ポイント:

  • 1回に読み込む量を指定することで、メモリ使用量を制御できる
  • ファイルの終わりはchunkが空になったときに判定
  • 画像や音声などのバイナリファイルにも応用可能

3. with文を使う理由と便利さ

3. with文を使う理由と便利さ
3. with文を使う理由と便利さ

with open(...)を使うと、ファイルを開いた後に自動で閉じてくれるので便利です。ファイルを閉じ忘れると、メモリに余計な負荷がかかることがあります。


with open("example.txt", "r") as file:
    data = file.read(100)  # 先頭100文字だけ読み込む

4. ジェネレーターでメモリ効率アップ

4. ジェネレーターでメモリ効率アップ
4. ジェネレーターでメモリ効率アップ

Pythonのジェネレーターを使うと、さらにメモリ効率を高められます。ジェネレーターは1つずつデータを生成する仕組みで、すべてを一度に保持しません。


def read_large_file(file_path):
    with open(file_path, "r", encoding="utf-8") as file:
        for line in file:
            yield line.strip()

for line in read_large_file("large_file.txt"):
    print(line)

ポイント:

  • yieldを使うと、必要な行だけ生成して処理できる
  • 大きなファイルでも一度にメモリに乗せない

5. バイナリファイルの効率的な処理

5. バイナリファイルの効率的な処理
5. バイナリファイルの効率的な処理

バイナリファイル(画像、音声、動画など)も小さなチャンクに分けて読み書きできます。大量のデータを扱う際にメモリ節約になります。


with open("large_image.jpg", "rb") as file:
    while True:
        chunk = file.read(4096)  # 4KBずつ読み込む
        if not chunk:
            break
        # chunkの処理(例えばコピーや解析)

6. 実用的なアドバイス

6. 実用的なアドバイス
6. 実用的なアドバイス
  • 大きなファイルを扱う場合は、一度に全データを読み込まない
  • 行単位、チャンク単位で処理する
  • with文を使って自動で閉じる
  • ジェネレーターを活用してメモリを節約
  • バイナリファイルでも同じ原則で効率的に処理可能

これらを組み合わせることで、Pythonで大きなファイルを安全かつ効率的に処理できます。

カテゴリの一覧へ
新着記事
New1
Flask
認証と認可の違いを整理しよう!Flaskで押さえるべき基礎概念
New2
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New3
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
New4
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.5
Java&Spring記事人気No5
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.6
Java&Spring記事人気No6
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Flask
Flaskでクラウド上のメッセージキュー(SQS/PubSub)を扱う完全ガイド!初心者向け解説