Pythonでバイナリファイルを読み込む方法|初心者向け完全ガイド
こんにちは、とまだです。
バイナリファイルを開こうとして、 文字化けした画面を見て困ったことはありませんか?
実はバイナリファイルには、 テキストファイルとは違う扱い方があるんです。
今回は現役のエンジニア、そして元プログラミングスクール講師としての経験から、 Pythonでバイナリファイルを読み込む方法について解説します。
バイナリファイルって何だろう?
簡単に言うと、バイナリファイルは 「コンピューターが直接理解できる形式」のファイルです。
日常生活で例えるなら、 レシピ本(テキストファイル)と 完成した料理(バイナリファイル)の違いのようなものです。
レシピ本は人間が読んで理解できます。 でも完成した料理は、見ただけでは作り方がわかりません。
同じように、バイナリファイルも そのままでは人間には理解できない形式なんです。
具体的には画像、動画、音声ファイル、 実行ファイルなどがバイナリ形式です。
なぜバイナリファイルの読み込みが必要?
開発現場では、次のような場面で バイナリファイルを扱う必要が出てきます。
- 画像編集ツールの開発
- センサーデータの解析
- 暗号化ファイルの復号
- 独自フォーマットの解析
これらの処理では、 バイナリデータを正しく読み込むことが 最初の重要な一歩になります。
Pythonでの基本的な読み込み方
では実際にコードを見ていきましょう。
ファイルを開く基本形
バイナリファイルを開くときは、
モード指定に"rb"
を使います。
with open("example.bin", "rb") as f:
data = f.read()
# dataにバイナリデータが入る
この"rb"
は"read binary"の略です。
テキストファイルの"r"
に
"b"
を追加したものですね。
重要なのは、読み込んだデータが bytes型として扱われることです。
bytes型って何?
bytes型は、バイナリデータを扱うための Pythonの特別な型です。
文字列とは違って、 そのままprintしても意味不明な記号が出てきます。
でも心配いりません。 これが正常な動作です。
部分的に読み込むテクニック
大きなファイルを扱うときは、 全部を一度に読み込むと大変です。
そんなときは、必要な部分だけを 読み込むことができます。
サイズを指定して読み込む
読み込むバイト数を指定する方法です。
with open("example.bin", "rb") as f:
header = f.read(10) # 最初の10バイト
body = f.read(50) # 次の50バイト
これは図書館で本を借りるときに、 必要な章だけコピーするようなものです。
読み込み位置を移動する
seek()
を使うと、
ファイルの好きな位置から読めます。
with open("example.bin", "rb") as f:
header = f.read(10)
f.seek(20) # 20バイト目へジャンプ
chunk = f.read(10)
本でいうと、目次を見て 直接読みたいページを開くイメージです。
実務でよく使う構造体の読み込み
バイナリファイルには、 数値データが含まれていることが多いです。
そんなときはstruct
モジュールが便利です。
整数値を読み込む例
ファイルの先頭に整数が入っている場合の 読み込み方法です。
import struct
with open("example.bin", "rb") as f:
data = f.read(4) # 4バイト読み込み
value = struct.unpack("<I", data)[0]
# valueに整数値が入る
"<I"
という記号は、
「リトルエンディアンの整数」を意味します。
難しそうに見えますが、 「データの読み方の指定」だと思ってください。
実際の活用シーン
バイナリファイルの解析は、 次のような流れで進めることが多いです。
まずヘッダ部分を読み込みます。 ここにはファイルの基本情報が入っています。
次にヘッダの内容を確認して、 ファイル形式やバージョンを判定します。
そしてボディ部分の読み込み位置を計算し、 必要なデータを取り出していきます。
最後に取得したデータを加工して、 目的の処理を実行します。
この流れは、荷物の中身を確認するときに まず送り状を見るのと似ていますね。
安全に扱うための注意点
バイナリファイルを扱うときは、 いくつか気をつけることがあります。
エラー処理は必須
ファイルが存在しない場合や、 アクセス権限がない場合があります。
try:
with open("example.bin", "rb") as f:
data = f.read()
except FileNotFoundError:
print("ファイルが見つかりません")
except PermissionError:
print("ファイルにアクセスできません")
エラー処理を入れることで、 プログラムが突然終了するのを防げます。
メモリ使用量に注意
大きなファイルを一度に読み込むと、 メモリ不足になることがあります。
必要に応じて、 部分読み込みを活用しましょう。
フォーマットの確認
想定と違う形式のファイルが来ることもあります。
ヘッダをチェックして、 正しいフォーマットか確認する習慣をつけましょう。
よくある質問
Q: テキストファイルもバイナリモードで読めますか?
読めますが、改行コードなどの処理が 複雑になるのでおすすめしません。
Q: バイナリファイルの中身を確認する方法は?
専用のバイナリエディタを使うか、 16進数表示で確認することができます。
Q: どんなときにstructモジュールを使いますか?
数値データや固定長の構造体を 読み込むときに便利です。
今日から使えるバイナリファイル読み込み
バイナリファイルの読み込みは、 最初は難しく感じるかもしれません。
でも基本的な考え方は、 「適切なモードで開いて読む」だけです。
まずは小さなファイルで練習してみてください。
open()
に"rb"
を指定すること。
read()
でデータを取得すること。
必要に応じてseek()
で位置を移動すること。
これらの基本を押さえれば、 画像処理やデータ解析など、 より高度な処理への道が開けます。
実際のプロジェクトで使うときは、 今回紹介したテクニックを組み合わせて 柔軟に対応してみてください。
著者について

とまだ
フルスタックエンジニア
Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。
著者の詳細を見る →