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

1. はじめに

Pythonではテキストファイルだけでなく、画像・音声・動画・実行ファイルなどのバイナリファイルも簡単に操作できます。
本記事では、Python|バイナリファイルの読み込み書き込み方法について、初心者にも分かりやすくコード付きで解説します。

実務では、ファイルのコピー処理やデータ解析、バイナリ形式のプロトコル処理などで頻繁に使われるテクニックです。この記事を読めば、Pythonでバイナリファイルを自在に扱えるようになります。

 

2. Pythonでのバイナリファイル処理の基本

2-1. バイナリファイルとは?

バイナリファイルは、人間が読めるテキストではなく、0と1で構成された生のデータです。たとえばJPEG画像やMP3音楽ファイル、.exeなどの実行ファイルがこれに該当します。

Pythonでバイナリファイルを扱う際には、ファイルを開くときに‘rb’(読み取り)‘wb’(書き込み)などのバイナリモードを指定する必要があります。

2-2. 基本的な読み込みコード

# バイナリファイルの読み込み
with open('sample.jpg', 'rb') as file:
    binary_data = file.read()

# データの一部を表示(先頭10バイト)
print(binary_data[:10])

実行結果:

b'\xff\xd8\xff\xe0\x00\x10JFIF'

2-3. 基本的な書き込みコード

# バイナリデータを書き込む
with open('copy_sample.jpg', 'wb') as file:
    file.write(binary_data)

実行結果:

copy_sample.jpg にバイナリデータを書き込みました。

 

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

3-1. バイナリファイルをコピーする

最も基本的でよく使われるケースが「ファイルコピー」です。

def copy_binary_file(source, destination):
    with open(source, 'rb') as src_file:
        data = src_file.read()
    with open(destination, 'wb') as dest_file:
        dest_file.write(data)

copy_binary_file('sample.jpg', 'sample_copy.jpg')

実行結果:

sample_copy.jpg を作成しました。

3-2. バイナリファイルを分割して読み込む

大きなファイルを一度に読み込むとメモリ使用量が増えるため、チャンク(一定サイズ)ごとに読み込む方法も有効です。

def read_in_chunks(file_path, chunk_size=1024):
    with open(file_path, 'rb') as file:
        while chunk := file.read(chunk_size):
            print(chunk[:10])  # 先頭10バイトのみ表示

read_in_chunks('sample.jpg')

実行結果:

バイナリデータを1KBずつ読み込み、先頭のバイトを表示

3-3. base64形式に変換して扱う

バイナリデータはbase64でテキストに変換して保存や通信にも利用できます。

import base64

# バイナリをbase64へ変換
with open('sample.jpg', 'rb') as file:
    encoded = base64.b64encode(file.read())

# デコードして元に戻す
decoded = base64.b64decode(encoded)

# 書き出し
with open('decoded.jpg', 'wb') as file:
    file.write(decoded)

実行結果:

base64エンコード→デコード→画像として保存

 

4. 注意点・エラー対策

4-1. ファイルが存在しない

存在しないファイルを読み込もうとすると FileNotFoundError が発生します。

try:
    with open('not_exist.jpg', 'rb') as file:
        data = file.read()
except FileNotFoundError:
    print("ファイルが見つかりません。")

実行結果:

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

4-2. 書き込み時のパーミッションエラー

書き込み先フォルダに権限がないとPermissionErrorになります。
例:/system/などのディレクトリに保存しようとする場合。

4-3. バイナリモードで開くことを忘れる

'r''w'モードでバイナリファイルを開くと、文字列として扱われ、デコードエラーになることがあります。バイナリを扱うときは必ず'rb'または'wb'を使いましょう。

 

5. まとめ

この記事では、Pythonでのバイナリファイルの読み込み・書き込み方法を解説しました。基本から応用まで、画像ファイルのコピーやbase64エンコードといった実用例も紹介しました。

  • バイナリファイルは'rb''wb'モードで開く
  • 一括読み込みとチャンク読み込みを使い分ける
  • base64を使えばテキストとして送受信可能

学習のコツ: まずは画像や音声ファイルを対象に、読み書きを試すと理解が深まります。
実務での活用例: ログファイルの圧縮・復元、ネットワーク通信などでも活躍する技術です。

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