カテゴリ: 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
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
New2
Flask
Flask×Flask-SocketIOでチャットアプリを作る流れを初心者向けにやさしく解説
New3
Flask
Flaskアプリの作り方を基礎から学ぼう!初心者が覚えるべき開発の流れとは?
New4
Flask
Flask-WTFでファイルアップロードフォームを完全ガイド!初心者でもわかる画像やPDFのアップロード方法
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Flask
Flask-Loginでユーザー認証を完全ガイド!初心者でもわかるログイン処理の作り方
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.5
Java&Spring記事人気No5
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.6
Java&Spring記事人気No6
Python
Pythonでリストを文字列に変換する方法を完全ガイド!初心者でもわかるjoinの使い方
No.7
Java&Spring記事人気No7
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.8
Java&Spring記事人気No8
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説