PYTHON MEBY

Pythonでファイルをバイナリモードで読み書き

この記事では、Python でファイルをバイナリモードで読み書きする方法を説明します。バイナリモードを使用することで、テキストファイル以外のあらゆる種類のファイルを処理できます。様々なファイル操作の例を通して、効率的なファイル処理を学びます。

目次

バイナリモードとは?

Pythonでファイルを扱う際、通常はテキストモードを使用します。テキストモードでは、改行コードなどの文字コード変換が行われます。しかし、画像や音声、圧縮ファイルなど、テキスト以外のデータを扱うにはバイナリモードを使用する必要があります。バイナリモードでは、データはそのままの状態で読み書きされます。

ファイルを開く際に、モード文字列に 'b' を追加することでバイナリモードを指定します。例えば、読み込みモードは 'rb'、書き込みモードは 'wb' となります。

ファイルの読み込み (read)

バイナリモードでファイルを読み込むには、open() 関数で 'rb' モードを指定してファイルを開き、read() メソッドを使用します。read() メソッドは、ファイル全体の内容をバイト列として返します。

with open('example.bin', 'rb') as f:
    data = f.read()
    print(data)

読み込んだデータはバイト列(bytes)型なので、必要に応じて適切な方法でデコードする必要があります。例えば、画像ファイルであれば、Pillowなどのライブラリを使用してデコードします。

ファイルの書き込み (write)

バイナリモードでファイルに書き込むには、open() 関数で 'wb' モードを指定してファイルを開き、write() メソッドを使用します。write() メソッドには、バイト列(bytes)を渡します。

data = b'Hello, binary world!'
with open('output.bin', 'wb') as f:
    f.write(data)

書き込むデータが文字列の場合、encode() メソッドを使ってバイト列に変換する必要があります。例えば、'utf-8' エンコーディングを使用して 'data.encode('utf-8')' とします。

ファイルの追記 (append)

既存のファイルにデータを追記するには、'ab' モードを指定します。ファイルが存在しない場合は、新規作成されます。

with open('output.bin', 'ab') as f:
    f.write(b'\nThis is appended data.')

具体的な使用例:画像ファイルの処理

Pillowライブラリを使って画像ファイルを読み書きしてみましょう。

from PIL import Image

# 画像の読み込み
with open('image.png', 'rb') as f:
    img = Image.open(f)
    img.show()

# 画像の保存
img.save('new_image.png')

Pillowライブラリは事前にインストールする必要があります。'pip install Pillow' でインストールできます。

エラー処理と例外処理

ファイル操作では、様々なエラーが発生する可能性があります。FileNotFoundError(ファイルが存在しない)、IOError(入出力エラー)、PermissionError(アクセス権限エラー)などです。try-exceptブロックを使用してエラーを処理しましょう。

try:
    with open('nonexistent.bin', 'rb') as f:
        data = f.read()
except FileNotFoundError:
    print('ファイルが見つかりません')
except Exception as e:
    print(f'エラーが発生しました: {e}')

関連記事