Python|ファイルをストリームで処理する

1. はじめに

Pythonではファイルを操作する際に、「ストリーム処理」という方法を使うことで、大容量ファイルでも効率よく読み書きすることが可能です。この記事では、Pythonでファイルをストリームで処理する方法を、初心者にもわかりやすく丁寧に解説します。

ストリーム処理を使えば、メモリを圧迫することなく1行ずつ読み込んだり、書き出しをリアルタイムに行うことができます。ログ解析、大量データ処理、リアルタイム出力など、多くの実務で活用できるテクニックです。

本記事では、基本的な使い方から応用、エラー対策まで網羅的に紹介します。Pythonで効率よくファイルを扱いたい方はぜひ参考にしてください。

 

2. Pythonのストリーム処理の基本

ストリーム処理とは?

ストリーム処理とは、ファイルの中身を一括ではなく「少しずつ処理」することです。Pythonではopen()関数を使い、テキストファイルやバイナリファイルを逐次読み書きできます。

基本の構文と例

ファイルの中身を1行ずつストリームで読み込む基本コードは以下の通りです。

# ファイルを1行ずつ読み込むストリーム処理
with open("sample.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

実行結果:

1行目の内容
2行目の内容
3行目の内容

このようにwith open()for line in fを使うことで、ストリーム形式でファイルを扱えます。

 

3. よくある使い方・応用例

大きなCSVファイルの読み取り

例えば、数GBにおよぶCSVファイルを読み取る際も、ストリーム処理で対応可能です。

import csv

# 大きなCSVを1行ずつ処理
with open("large_data.csv", "r", encoding="utf-8") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)

実行結果:

['id', 'name', 'score']
['1', 'Alice', '90']
['2', 'Bob', '85']

標準入力との組み合わせ(リアルタイム処理)

標準入力からのデータをストリーム処理することも可能です。これにより、コマンドラインツールのような使い方もできます。

import sys

print("入力をどうぞ(Ctrl+Dで終了):")
for line in sys.stdin:
    print("受け取った内容:", line.strip())

実行結果:

入力をどうぞ(Ctrl+Dで終了):
こんにちは
受け取った内容: こんにちは
テスト
受け取った内容: テスト

バイナリファイルの読み書き

画像やPDFなどのバイナリファイルも、ストリームで扱うことができます。

# バイナリファイルの読み取り
with open("image.png", "rb") as f:
    data = f.read(1024)  # 1024バイトずつ読み取り
    while data:
        # ここで処理(例:出力)
        print(len(data))
        data = f.read(1024)

実行結果:

1024
1024
1024
...

 

4. 注意点・エラー対策

ファイルが存在しない場合

ファイルが存在しない場合、FileNotFoundErrorが発生します。以下のように対策します。

try:
    with open("not_found.txt", "r") as f:
        content = f.read()
except FileNotFoundError:
    print("ファイルが見つかりません")

実行結果:

ファイルが見つかりません

文字コードエラー(UnicodeDecodeError)

読み込むファイルのエンコーディングが合っていないと、UnicodeDecodeErrorが出ます。
その場合はencoding="utf-8"encoding="shift_jis"などを指定してください。

バイナリとテキストのモードを区別する

“rb”や”wb”はバイナリ、”r”や”w”はテキストモードです。間違えると処理に失敗します。

 

5. まとめ

この記事ではPythonでファイルをストリームで処理する方法について解説しました。メモリ効率の良さや、逐次処理の強みを活かして、実務でもよく使われるテクニックです。

  • ファイルを1行ずつ読み込む方法
  • CSVや標準入力、バイナリファイルの応用
  • エラー対策とモード指定の重要性

ストリーム処理は、大容量データを扱う業務やバッチ処理で非常に役立ちます。ログ解析やファイル分割など、学習後すぐに応用できるので、ぜひ実践で活用してください!

タイトルとURLをコピーしました