Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

bytes, bytearray

ググってみると、文字列に関する型というよりは、バイナリデータを扱う型でした。
まとめてバイナリシーケンスとも呼ばれます。
 
0~255の整数のみが要素になります。
 

bytes イミュータブル(値の変更不可)
bytearray ミュータブル(値の変更可能)

 

bytes型

・bytes型の生成

リテラル b"..."
bytes()関数
文字列.encode()メソッド

 

b1 = b"abc"

print(b1)        # b'abc'
print(type(b1))  # <class 'bytes'>

b2= bytes("def", encoding="shift_jis")

print(b2)        # b'abc'
print(type(b2))  # <class 'bytes'>

b3 = "ghi"
b3 = b3.encode("utf-8")
print(b3)        # b'ghi'
print(b3[1])     # 104     
     
     
b3 = b3.decode("utf-8")
print(b3)        # ghi
print(b3[1])     # h

 
日本語エンコード

エンコード pythonでの名
シフトJIS shift-jis, shift_jis, sjis
ISO-2022-JP(JIS) iso-2022-jp
EUC-JP euc-jp
UTF-8 utf-8

 
変換エラーに対するオプション

文字列 説明
strict エラーを発生して変換停止。デフォルト
replace 変換できない文字を「?」などで表示し、変換は続ける。
ignore 変換できない文字はスルーして、変換を続ける。

 

bytearray型

ba1 = bytearray(b"abc")
ba2 = bytearray("abc".encode())

print(ba1, ba2) # bytearray(b'abc') bytearray(b'abc')
print(ba1[0])   # 97

# ba3 = bytearray(b"いろは")
# SyntaxError: bytes can only contain ASCII literal characters.
ba3 = bytearray("いろは".encode())

print(ba3)           # bytearray(b'\xe3\x81\x84\xe3\x82\x8d\xe3\x81\xaf')
print(ba3[6])        # 227
print(ba3.decode())  # いろは

 
バイナリデータを扱う予定はまだないので、ゆっくり調べます。