Pythonを用いたバイト配列(bytearray)とバイナリファイルの相互変換について詳しく解説します。この記事では、基本的な変換方法から、応用例まで幅広くカバーします。
はじめに
バイト配列とバイナリファイルの相互変換は、データ処理やファイル操作で非常に役立つスキルです。Pythonではこれらの操作が簡単に行えますが、その背景や応用例についても理解しておくと、更に活用の幅が広がります。
基本的な変換方法
バイト配列からバイナリファイルへ
Pythonでバイト配列からバイナリファイルに変換する基本的なコードは以下の通りです。
# バイト配列を定義
byte_array = bytearray([65, 66, 67])
# バイナリファイルに書き込む
with open('sample.bin', 'wb') as f:
f.write(byte_array)
この例では、`bytearray`で`[65, 66, 67]`というバイト配列を作り、`sample.bin`というバイナリファイルに書き込んでいます。
バイナリファイルからバイト配列へ
逆に、バイナリファイルからバイト配列に変換する場合の基本的なコードは以下です。
# バイナリファイルから読み込む
with open('sample.bin', 'rb') as f:
byte_array = bytearray(f.read())
`’rb’`モードでファイルを開き、`read()`メソッドで内容を読み取り、それを`bytearray`で受け取っています。
応用例
画像ファイルの操作
バイト配列とバイナリファイルの変換は、画像ファイルを操作する際にも非常に役立ちます。
# 画像ファイル('image.jpg')を開き、バイト配列に変換
with open('image.jpg', 'rb') as f:
image_byte_array = bytearray(f.read())
# バイト配列を新しい画像ファイル('new_image.jpg')として保存
with open('new_image.jpg', 'wb') as f:
f.write(image_byte_array)
この例では、`image.jpg`という画像ファイルを開いてその内容をバイト配列に変換しています。その後、新しいファイル`new_image.jpg`としてそのバイト配列を保存しています。
暗号化と復号
バイト配列を使ってデータの暗号化と復号も行えます。
# 単純なXOR暗号化と復号
key = 123
original_data = bytearray('hello', 'utf-8')
encrypted_data = bytearray([b ^ key for b in original_data])
# 復号
decrypted_data = bytearray([b ^ key for b in encrypted_data])
ネットワーク通信
バイト配列は、ネットワークでのデータ送受信にも使用されます。
# ソケット通信でのバイト配列の送受信
import socket
# サーバー側
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(1)
connection, address = server_socket.accept()
received_data = bytearray(connection.recv(1024))
# クライアント側
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 12345))
client_socket.sendall(bytearray('hello', 'utf-8'))
この例では、TCP/IPで簡単なエコーサーバーとクライアントを作成しています。データの送受信にバイト配列が使われています。
まとめ
バイト配列とバイナリファイルの相互変換は、Pythonで簡単に実装できます。更に、このスキルはファイル操作から
ネットワーク通信、データの暗号化・復号に至るまで多くの場面で活用可能です。
コメント