bytes、bytearray
Python3引入兩個新的類型:
bytes:不可變字節序列
bytearray:字節組數據,可變
字符串與bytes
字符串是字符組成的有序序列,字符可以使用編碼來理解
bytes是字節組成的有序的不可變序列
bytearray是字節組成的有序可變序列
編碼與解碼
字符串按照不同的字符集編碼encode返回字節序列bytes
encode(encoding='utf-8') -->bytes
字節序列按照不同的字符集解碼decode返回字符串
bytes.decode(encoding='utf-8') --->str
bytearray.decode(encoding='utf-8') --->str
x = 'abc'.encode() #默認字符集為utf-8 print(x) b'abc' #輸出結果 y = x.decode() #解碼 print(y) 'abc'
ASCII碼表
一個bytes,有8個bites,存在2**8種狀態,ASCII是美國信息交換標准diamante,是基於拉丁字母的一套單字節編碼系統
字符串和16進制表示
字符串‘1’,可以寫成
x = '1'
y = '\x31'
'\x09'表示tab鍵\t
'\x0d\x0a' 表示char \r \n
常用的\t \r \n 0~9 A~Z a~z十進制十六進制:
如下是十六進制表示: c = '\t' # '\x09' 1個字符 tab鍵 '\r\n' '\x0d0a' '\0d' ---> \r '\x0a' --> \n hex char 31~39 1~9 41~5A A~Z 61~7A a~z
bytes定義
bytes()表示空bytes,bytes(int)指定字節的bytes,被0填充,示例:bytes(5) b'\x00\x00\x00\x00\x00'
bytes(iterable_of_ints) bytes [0~255]的int組成的可迭代對象
bytes(string,enconding[,error]) -->bytes等價於 string.encode()
bytes(bytes_or_buffer) ---> immutable copy of bytes_or_buffer 從一個字節序列或buffer中復制一個新的不可變的bytes對象
使用b 前綴定義:
只允許基本的ASCII使用字符形式b'abc9'
使用16進制表示b"\x41\x61"
bytes(range(5)) b'\x00\x01\x02\x03\x04' bytes(5) b'\x00\x00\x00\x00\x00'
a = 'abc'.encoding(encoding='uft8)
b = bytes(a)
print(b)
b'abc'
bytes操作
和str類型相似,都是不可變類型,所以很多方法相似,只不過bytes的方法,輸入時bytes,輸出也是bytes
b'abcde'.replace(b'd',b'D')
b'abcd'.find(b'b')
類方法bytes.fromhex(string):string必須是2個字符的16進制形式
bytes.fromhex('61 62 63 09 0a 0d')
輸出:b'abc\t\n\r'
hex():返回16進制表示的字符串 ‘abc’.encode().hex() #'616263'
索引:b'abc'[2] 返回該字節對應的數,int類型 #輸出99 十進制數
bytearray定義
bytearray()空bytearray,bytearray(int)指定字節的bytearray,被0填充
bytearray(iterable_of_ints)--->bytearray[0,255]int組成的可迭代對象
bytearray( bytes_or_buffer) 從一個字節序列或buffer復制出一個新的可變的bytearray對象
注: b前綴定義的類型是bytes類型
操作:
和bytes類型的方法相同:
bytearray(b'abcd').replace(b'f',b'k')
bytearrya(b'abc').find(b'b')
類方法bytearray.fromhex(string)
sting 必須是2個字符的16進制的形式,'6162 63' ,空格將被忽略!
bytearray.fromhex('6261 63') #bytearray(b'abc') bytearray('abc'.encode()).hex() #616263
bytearray操作
appnd(int):尾部追加一個元素
insert(index,int):在指定的索引位置插入一個元素
extend(iterable_of_ints):將一個可迭代整數集合追加到當前的bytearray
pop(index=-1):從指定的索引上移除元素,默認從尾部移除
remove(value):找到第一個value移除,找不到拋異常
注意:此方法需要使用int型
clear():清除
reverse():反轉,就地修改
將數據轉換成字符串則使用str() ,將數據轉換成bytes則使用bytes,對應的是decode encode
data = str(data, encoding='utf-8')
data = bytes(data, encoding='utf-8')