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}')
関連記事
- Pythonでファイルを読み込む(read, readline, readlines)
- Pythonでファイルに書き込む(write, writelines)
- Pythonでファイルを追記モードで開く
- Pythonでファイルの上書き・削除
- Pythonでファイルを開く・閉じる(open, close)
- Pythonでファイル・ディレクトリの存在確認(os.path.exists, os.path.isfile, os.path.isdir)
- Pythonでファイル・ディレクトリの操作(os, shutil, pathlib)
- Pythonでファイルのエンコーディングを指定して読み書き
- Pythonでwith文によるリソース管理
- PythonでCSVファイルを読み書き(csv)