Pythonでバイナリファイルを読み書きする方法を初心者向けに解説!rb / wb モードの使い方
生徒
「先生、Pythonで普通のテキストファイルじゃなくて、画像や音声のようなファイルを扱いたいときはどうすればいいですか?」
先生
「それにはバイナリファイルとして読み書きする必要があります。Pythonではrbやwbというモードを使います。」
生徒
「rbとかwbって何ですか?ちょっと難しそうです…」
先生
「簡単に言うと、rbは『バイナリ読み込みモード』、wbは『バイナリ書き込みモード』です。文字としてではなく、データのまま読み書きします。」
生徒
「なるほど!具体的にはどうやって使うんですか?」
先生
「それでは、実際のPythonコードで見ていきましょう!」
1. バイナリファイルとは?
バイナリファイルとは、テキストではなく0と1で構成されたデータのことです。画像(jpg, png)、音声(mp3, wav)、動画(mp4)などがこれに該当します。テキストファイルのように文字を直接読むことはできませんが、Pythonなら簡単に読み書きできます。
2. rb / wb モードとは?
Pythonでファイルを開くとき、モードを指定します。代表的なものは以下です:
r: 読み込み(テキスト)w: 書き込み(テキスト)rb: 読み込み(バイナリ)wb: 書き込み(バイナリ)
ポイントは、バイナリモードでは文字としてではなく、データそのものを扱うことです。例えば画像ファイルを文字列として扱おうとすると壊れてしまいます。
3. バイナリファイルを読み込む方法(rbモード)
まず、バイナリファイルを読み込む例を見てみましょう。ここでは画像ファイルを例にします。
with open("sample.jpg", "rb") as file:
data = file.read()
print("データの長さ:", len(data))
ポイント:
with open(...)でファイルを開くと、自動で閉じてくれるので便利です。"rb"モードで開くと、画像や音声のデータをそのまま読み込めます。file.read()で全データを読み込みます。
データの長さ: 254312
4. バイナリファイルを書き込む方法(wbモード)
次に、読み込んだデータを別のファイルに書き込む例です。
with open("copy_sample.jpg", "wb") as file:
file.write(data)
print("コピーが完了しました")
ポイント:
"wb"モードで開くと、バイナリデータを書き込めます。- 既存のファイルがある場合は上書きされます。
- テキストファイルの
wモードと同じように使えますが、データはバイナリです。
5. 少し応用:一部だけ読み書きする方法
ファイル全体ではなく、一部だけ読み書きしたいときもあります。その場合はread(size)を使います。
with open("sample.jpg", "rb") as file:
part_data = file.read(1024) # 先頭1KBだけ読み込む
print("読み込んだデータ:", len(part_data))
この方法を使えば、大きなファイルでも一度にメモリに読み込まずに処理できます。
6. 注意点とよくある質問
バイナリファイルを扱うときは以下に注意してください:
- テキストモード(r/w)で画像や音声ファイルを開くと、データが壊れます。
- ファイルを読み込んだら必ず閉じること。
withを使えば自動で閉じてくれます。 - バイナリデータは
len()でバイト数を確認できます。
よくある質問:
Q1: 「rbで読み込んだデータをprintすると文字が読めないのですが…?」
A: バイナリデータは0と1の塊なので、文字列ではありません。画像や音声は専用のソフトで確認してください。
Q2: 「wbで書き込むと元のファイルは消えますか?」
A: はい、同じ名前のファイルがある場合は上書きされます。注意してください。
7. まとめの代わりに補足
Pythonでバイナリファイルを扱うと、画像や音声、動画など様々なデータを自由に操作できます。rbとwbの使い方を覚えれば、データ分析や画像処理などにも応用可能です。
最初は少し難しく感じるかもしれませんが、まずは小さな画像ファイルで練習すると理解が早まります。