Pythonのバイナリシーケンス型入門!bytes・bytearray・memoryviewの使い方を徹底解説
Pythonでは、bytesとbytearrayという2つの型を使ってバイナリデータを操作できます。これらの型は、memoryviewと呼ばれるバッファプロトコルによってサポートされています。memoryviewを使うと、実際のデータをコピーすることなく、他のバイナリオブジェクトのメモリに直接アクセスできるため、大量のデータを扱う際に効率的です。
バイトリテラルの記述方法
bytesオブジェクト(バイトリテラル)は、以下のいずれかの方法で作成できます。
b'シングルクォートで囲んだバイト列'b"ダブルクォートで囲んだバイト列"b'''三重のシングルクォートで囲んだバイト列'''またはb"""三重のダブルクォートで囲んだバイト列"""
なお、bytesはイミュータブル(変更不可)であるのに対し、bytearrayはミュータブル(変更可能)という違いがある点にも注意しましょう。
bytes・bytearrayの主なメソッド一覧
fromhex(string)メソッド
fromhex()メソッドは、16進数形式の文字列からbytesオブジェクトを生成します。引数には各バイトが2桁の16進数で表された文字列を渡します。文字列中に含まれるASCII空白文字(スペースなど)は自動的に無視されます。
hex()メソッド
hex()メソッドは、bytesオブジェクトの各バイトを2桁の16進数文字列に変換して返します。fromhex()と逆の変換を行うメソッドです。
replace(byte, new_byte)メソッド
replace()メソッドは、指定したバイト列を新しいバイト列に置き換えます。元のオブジェクトは変更されず、置き換え後の新しいオブジェクトが返されます。
count(sub[, start[, end]])メソッド
count()メソッドは、部分バイト列が登場する回数(重複しない出現回数)を返します。オプションでstartとendを指定すると、その範囲内だけを検索対象とします。
find(sub[, start[, end]])メソッド
find()メソッドは、部分バイト列が最初に現れる位置(インデックス)を返します。見つかった場合はそのインデックスを、見つからなかった場合は-1を返します。
partition(sep)メソッド
partition()メソッドは、区切り文字(sep)を基準にバイト列を分割します。戻り値は「(区切り前の部分, 区切り文字, 区切り後の部分)」という3要素のタプルになります。
memoryview(obj)メソッド
memoryview()メソッドは、引数に渡したオブジェクトのmemoryviewオブジェクトを返します。memoryviewはPythonのバッファプロトコルへの安全なアクセス手段であり、オブジェクト内部のバッファにコピーなしでアクセスできます。大きなバイナリデータの一部だけを参照したい場合などに便利です。
サンプルコード
hexStr = bytes.fromhex('A2f7 4509')
print(hexStr)
byteString = b'\xa2\xf7E\t'
print(byteString.hex())
bArray1 = b"XYZ"
bArray2 = bArray1.replace(b"X", b"P")
print(bArray2)
byteArray1 = b'ABBACACBBACA'
print(byteArray1.count(b'AC'))
print(byteArray1.find(b'CA'))
bArr = b'Mumbai,Kolkata,Delhi,Hyderabad'
partList = bArr.partition(b',')
print(partList)
myByteArray = bytearray('String', 'UTF-8')
memView = memoryview(myByteArray)
print(memView[2]) # 'r'のASCIIコード
print(bytes(memView[1:5]))
実行結果
b'\xa2\xf7E\t' a2f74509 b'PYZ' 3 4 (b'Mumbai', b',', b'Kolkata,Delhi,Hyderabad') 114 b'trin'
まとめ
このように、Pythonのバイナリシーケンス型には文字列(str)とよく似た豊富なメソッドが用意されており、16進数との相互変換や検索・置換・分割などを直感的に行えます。画像ファイルや通信プロトコルなど、バイナリデータを扱う場面ではbytes・bytearray・memoryviewを使い分けることで、安全かつ効率的なプログラムを実装できます。
-
Python Tkinterのafter()メソッドの使い方を徹底解説
Tkinterは、PythonでGUIアプリケーションを作成するための標準ライブラリです。ウィンドウやボタン、ラベルなどのウィジェットを作成・操作するための組み込みメソッドが多数用意されており、データの表示やGUIイベントの処理を簡単に実装できます。本記事では、その中でも特に便利なafter()メソッドの使い方について、具体的なコード例とともに詳しく解説します。after()メソッドの基本構文.after(delay, FuncName=FuncName)このメソッドは、指定した遅延時間(ミリ秒単位)が経過した後に、引数として渡した関数FuncNameを呼び出します。タイマー処理や定期的な更新
-
Pythonでリストを出力する方法|インデックスの基本から実践的な出力テクニックまで
Pythonのリストとは? Pythonのリスト(list)は、複数の要素をひとつにまとめて管理できるデータ型です。リスト内の各要素は順序を持って格納されており、それぞれの位置(インデックス)を指定することで、任意の要素にアクセスできます。 インデックスは0から始まる リストのインデックスは0から始まる点に注意が必要です。つまり、最初の要素が list[0]、2番目の要素が list[1]、3番目の要素が list[2] に対応します。 例えば、以下のようなリストを考えてみましょう。 numbers = [10, 20, 50, 40] print(numbers[2]) # 出力結果:5