Pythonのbytes()
とbytearray()
: バイナリデータの魔法
Pythonにおけるbytes
とbytearray
は、バイナリデータを扱うための強力なデータ型です。この記事では、それぞれの基本的な使い方から、データの変換、操作、そして実用的な応用例までをコード例を交えて詳しく解説します。
1. bytes
とは
bytes
はイミュータブル(変更不可)なバイナリデータを扱うためのデータ型です。通常、ASCII文字やUTF-8エンコーディングなどで表現できるデータを格納します。
1.1. bytes
の作成
bytes
オブジェクトは、以下のようにして作成します。
# ASCII文字列からbytesを作成 ascii_bytes = b"Hello, World!" # 16進数からbytesを作成 hex_bytes = bytes.fromhex("48656c6c6f2c20576f726c64") # バイト列からbytesを作成 byte_list = [72, 101, 108, 108, 111] byte_array = bytes(byte_list)
1.2. bytes
の操作
bytes
はイミュータブルなため、要素の変更はできませんが、スライスや検索、長さの取得などの操作が可能です。
# スライス sub_bytes = ascii_bytes[7:12] # 検索 index = ascii_bytes.index(b"Wor") # 長さの取得 length = len(ascii_bytes)
2. bytearray
とは
bytearray
はbytes
と同様のバイナリデータを扱うデータ型ですが、bytes
とは異なりミュータブル(変更可能)です。これにより、データの変更が可能となります。
2.1. bytearray
の作成
bytearray
オブジェクトは、以下のようにして作成します。
# ASCII文字列からbytearrayを作成 ascii_bytearray = bytearray(b"Hello, World!") # 16進数からbytearrayを作成 hex_bytearray = bytearray.fromhex("48656c6c6f2c20576f726c64") # バイト列からbytearrayを作成 byte_list = [72, 101, 108, 108, 111] bytearray_from_list = bytearray(byte_list)
2.2. bytearray
の操作
bytearray
はミュータブルなため、要素の変更ができます。また、bytes
と同様にスライスや検索、長さの取得も可能です。
# 要素の変更 ascii_bytearray[7:12] = b"Univ!" # スライス sub_bytearray = ascii_bytearray[7:12] # 検索 index = ascii_bytearray.index(b"Univ!") # 長さの取得 length = len(ascii_bytearray)
3. 応用例: ファイルの読み書き
bytes
とbytearray
はファイルの読み書きにも役立ちます。以下は、バイナリファイルの読み書きの例です。
# バイナリファイルの書き込み with open("binary_data.bin", "wb") as file: data_to_write = bytearray(b"This is binary data.") file.write(data_to_write) # バイナリファイルの読み込み with open("binary_data.bin", "rb") as file: read_data = bytearray(file.read()) print(read_data)
4. まとめ
bytes
とbytearray
はバイナリデータの扱いに特化したデータ型であり、様々な場面で利用されています。基本的な使い方から実用的な応用例までを理解し、これらのデータ型を上手に活用して効率的なプログラミングを行いましょう。