Pythonでバイナリファイルを読み書きする方法を完全ガイド!初心者でもわかるrb / wbモードの使い方
生徒
「Pythonで画像とか音声みたいなデータを読み込んだり保存したりできますか?」
先生
「できますよ!そういったファイルは“バイナリファイル”と呼ばれていて、Pythonではrbやwbというモードで読み書きします。」
生徒
「バイナリファイルって何ですか?テキストファイルとは違うんですか?」
先生
「はい、テキストファイルは文字だけですが、バイナリファイルは画像や音、動画など、人間には読めないデータのかたまりなんです。それじゃあ詳しく説明していきましょう!」
1. バイナリファイルとは?
バイナリファイルとは、コンピューターが理解できる形で保存されたファイルのことです。画像ファイル(.jpg や .png)、音声ファイル(.mp3 や .wav)、PDF、Word、Excel などがそれにあたります。
こうしたファイルの中身は「0」や「1」のデジタル信号の集合体です。パソコンで「開いても文字化けする」ようなファイルがバイナリファイルだと思えばOKです。
2. rb / wb モードとは?
Pythonでファイルを開くときには、open()関数を使います。そのとき、どのようにファイルを操作するかを指定するのが「モード」です。
rb:バイナリファイルを「読み込み専用」で開く(read binary)wb:バイナリファイルを「書き込み専用」で開く(write binary)
"rb"や"wb"の「b」がポイントで、これを付けないとテキストファイルとして開いてしまいます。
3. バイナリファイルを読み込む基本
例えば、画像ファイルを読み込むには以下のように書きます:
with open("photo.jpg", "rb") as f:
binary_data = f.read()
with構文はファイルを開いたあとの「自動で閉じる仕組み」です。初心者でも安心して使えます。
f.read()で全体のバイナリデータを読み込み、変数binary_dataに格納しています。
4. バイナリファイルを書き込む基本
次は読み込んだバイナリデータを別のファイルに保存(書き込み)する方法です。コピーのようなイメージです。
with open("photo_copy.jpg", "wb") as f:
f.write(binary_data)
wbモードを使うと、既存のファイルは上書きされます。間違って大事なファイルに書き込まないように注意しましょう。
5. 画像ファイルをコピーする簡単な例
これまでの読み書きを組み合わせれば、画像ファイルをコピーすることができます。
with open("original.png", "rb") as source:
data = source.read()
with open("copied.png", "wb") as target:
target.write(data)
このように、バイナリファイルをrbモードで読み込み、wbモードで書き出すだけで簡単にコピーができます。
6. バイナリファイルとテキストファイルの違い
バイナリファイルは、文字コードなどを考えず「そのままのデータ」を読み書きします。一方でテキストファイル(.txtや.csvなど)は、読み込んだ後に文字列として扱うため、「文字コード(UTF-8など)」が関係してきます。
つまり、画像や音声などの人間が読めない形式にはバイナリモードを、文章など人間が読める形式にはテキストモードを使うのが基本です。
7. エラーが出たときの対処方法
バイナリファイルを扱っていると、次のようなエラーに出会うことがあります:
- FileNotFoundError: ファイルの名前が間違っている、またはファイルが存在しない。
- PermissionError: ファイルが開けない。書き込み禁止や管理者権限の問題の可能性あり。
- ValueError:
write()に文字列を渡してしまった。wbモードではバイト型(bytes)でないと書けません。
8. バイナリデータを部分的に読み書きする方法
大量のデータを一度に読み書きするのが難しい場合は、chunk(チャンク)という方法を使います。チャンクとは「小さなかたまり」のことです。
以下は、画像を1KBずつ読み込んでコピーする例です:
with open("original.jpg", "rb") as source, open("copy.jpg", "wb") as target:
while True:
chunk = source.read(1024)
if not chunk:
break
target.write(chunk)
これにより、大きなファイルでもメモリを圧迫せずに安全に扱えます。
9. バイナリで扱う場面は意外と多い!
Pythonのファイル処理では、バイナリモードを使う機会が実はとても多いです。以下のような場面が代表例です:
- 画像ファイルの読み書き
- 音声ファイルの編集
- PDFやWordファイルの操作
- Excelファイルの書き出し(
openpyxlなど) - データベースへのBLOB(バイナリ)保存
プログラミング初心者の方でも、「rb」「wb」を覚えることで、世界がグッと広がります。