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

Python を使ってローカルに保存されているバイナリファイルを開き、ファイルからバイトデータを読み込んだり、ファイルへバイトデータを書き込む方法について解説します。

(Last modified: )

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

バイナリファイルを読み込むためにファイルを開く場合、 open 関数のモードとして "r" に "b" を加えた "rb" を指定して次のように実行します。

f = open('myfile.dat', 'rb')

バイナリファイルに含まれるデータを読み込むには read メソッドを使用します。

read([size])

引数には読み込むバイト数を指定します。引数を省略した場合は EOF までのデータをすべて読み込み bytes オブジェクトとして返します。

バイナリファイルへ書き込むためにファイルを開く場合、 open 関数のモードとして "w" "a" "x" のいずれかに "b" を加えた "wb" "ab" "xb" のいずれかを指定して次のように実行します。

f = open('myfile.dat', 'wb')
f = open('myfile.dat', 'ab')
f = open('myfile.dat', 'xb')

書き込みの場合の "w" "a" "x" の違いについてはテキストファイルの場合と同じです。詳しくは「テキストファイルへ書き込む」を参照されてください。

バイナリファイルに対してデータを書き込むには write メソッドを使用します。

write(b)

引数に指定した bytes オブジェクトをファイルに書き込みます。

例えば次のように記述します。

f = open('myfile.dat', 'wb')
f.write(b'ABCDEFG')
f.close()

f = open('myfile.dat', 'rb')
data = f.read()
print(data)
>> b'ABCDEFG'

f.close()
サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample4-1.py という名前で保存します。

fr = open('circle_o.png', 'rb')
fw = open('circle_c.png', 'wb')

while True:
  data = fr.read(1)
  if len(data) == 0:
    break
  fw.write(data)

fw.close()
fr.close()

プログラムと同じディレクトリに circle_o.png というファイル名で次の画像ファイルを置いておきます。

バイナリファイルでの読み書き(1)

その後で、次のように実行してください。

python sample4-1.py

バイナリファイルでの読み書き(2)

画像ファイルを 1 バイトずつ読み込み、新しいファイルに読み込んだデータを書き込みます。画像ファイルの最後まで繰り返し行い、そのあとでそれぞれのファイルオブジェクトを閉じます。

プログラムを実行したあとに、プログラムがある同じディレクトリに circle_c.png というファイルが作成されています。

バイナリファイルでの読み書き(3)

画像ファイルのデータを読み込んで、新しく作成したファイルにそのままコピーすることができました。

-- --

Python を使ってローカルに保存されているバイナリファイルを開き、ファイルからバイトデータを読み込んだり、ファイルへバイトデータを書き込む方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。