Python bytearray()の使い方と1つの注意点

Python bytearray()関数を使用すると、バイト配列の特性を維持しながら、可変のバイナリデータを効率的に処理できます。つまり、バイト配列を文字列やリストのようにデータを簡単に操作できます。この記事では、bytearray()関数の使い方とその活用方法、および注意点について詳しく見ていきます。

Python bytearray()とは?

bytearray()はPythonが提供する可変長のバイトシーケンスです。バイト配列は基本的にバイナリデータを扱い、文字列のようにデータを操作することができます。bytesと異なり、変更が可能である点が大きな特徴です。

bytearray()基本の使い方

bytearray()は様々な方法で生成できます。最も簡単な方法は、空のバイト配列を生成することです。

Python
b = bytearray()
print(b)

空の配列だけでなく、他のデータ型をバイト配列に変換することもできます。

Python
b = bytearray("Hello", "utf-8")
print(b)

b = bytearray([72, 101, 108, 108, 111])
print(b)

文字列「Hello」をバイト配列に変換したものと、アスキーコード値で構成されたリストをbytearray(b’Hello’)に変換した結果は以下のようになります。

図1. Python bytearray()でバイト配列を生成する
図1. Python bytearray()でバイト配列を生成する

このように、bytearray()はさまざまなデータ型を入力として受け取り、それぞれをバイト配列に変換します。

バイト配列の操作

bytearray()は可変型のデータ型であるため、データを変更できます。たとえば、バイト配列の特定のインデックスにある値を変更したり、値を追加したりできます。

バイト配列の値を変更する

リストのように、特定のインデックスの値を変更できます。ただし、各値は0〜255の範囲の整数でなければなりません。

Python
b = bytearray(b'Hello')
b[1] = 97
print(b)
図2. Pythonバイト配列の値を変更する
図2. Pythonバイト配列の値を変更する

バイト配列に値を追加する

リストと同様に、append()関数を使用してバイト配列の末尾に値を追加できます。

Python
b.append(33)
print(b)
図3. Pythonバイト配列に値を追加する
図3. Pythonバイト配列に値を追加する

さらに、extend()を使用すると、複数の値を一度に追加することもできます。

Python
b.extend([32, 87, 111, 114, 108, 100])
print(b)
図4. Pythonバイト配列にextend()メソッドで複数の値を追加する
図4. Pythonバイト配列にextend()メソッドで複数の値を追加する

文字列との変換

bytearray()は主にバイナリデータを扱うため、文字列との変換が重要です。これを行うには、decode()とencode()メソッドを使用します。

バイト配列を文字列に変換する

バイト配列を文字列に変換するには、decode()を使用します。この時、どのエンコーディングを使用するか指定する必要があります。最も一般的なエンコーディングは「utf-8」です。

Python
b = bytearray(b'Hello')
s = b.decode('utf-8')
print(s)
図5. Python bytearray.decode()メソッドを使用してバイト配列を文字列に変換する
図5. Python bytearray.decode()メソッドを使用してバイト配列を文字列に変換する

文字列をバイト配列に変換する

逆に、文字列をutf-8でエンコードしてバイト配列に変換するには、encode()を使用します。

Python
s = "Hello"
b = bytearray(s.encode('utf-8'))
print(b)

注意点: バイト範囲

bytearray()の各要素は0から255の範囲の値でなければなりません。この範囲を超える値を追加または変更しようとすると、エラーが発生します。

Python
b = bytearray(b'Hello')
b[0] = 300

このように、「ValueError: byte must be in range(0, 256)」というエラーメッセージが表示され、0〜255の値を使用する必要があることを知らせてくれます。したがって、バイト配列を扱う際は常にこの範囲内で値を設定する必要があります。

図6. Python bytearrayで値が範囲を超える場合に発生するValueError
図6. Python bytearrayで値が範囲を超える場合に発生するValueError

bytearray()の活用

bytearray()は主にネットワークやファイル入出力でバイナリデータを処理する際に便利です。例えば、ネットワークソケットから受け取ったデータを処理したり、バイナリファイルを読み書きする際に頻繁に使用されます。

ファイル読み込みとバイト配列

バイナリファイルを読み取る際にbytearray()を使用してデータを処理できます。

Python
with open("example.bin", "rb") as file:
    data = bytearray(file.read())
    print(data)

バイナリファイルを処理する際には、bytearray()の可変的な特性を活用して、効率的にデータを操作できます。

まとめ

Pythonのbytearray()は、バイナリデータを可変的に処理できる強力なツールです。文字列のようにデータを操作できる一方で、バイト配列の特性を維持でき、メモリ効率が高く、ネットワークやファイル入出力などで特に有用です。バイト範囲制限などの注意点を覚えておけば、多くの場面で活用できる非常に便利なデータ型です。

これにより、バイナリデータをより効率的に処理できるので、ぜひ一度試してみてください。

リファレンス

関連ポスト

コメントする