bytes、bytearray
Python3引入兩個新類型:
bytes
不可變字節序列
bytearray
字節數組
可變
字符串與bytes
字符串是字符組成的有序序列,字符可以使用編碼來理解;
bytes是字節組成的有序的不可變序列;
bytearray是字節組成的有序的可變序列;
編碼與解碼
字符串按照不同的字符集編碼encode返回字節序列bytes
S.encode(encoding='utf-8', errors='strict') -> bytes
字節序列按照不同的字符集解碼decode返回字符串
bytes.decode(encoding='utf-8', errors='strict') -> str
bytearray.decode(encoding='utf-8', errors='strict') -> str
bytes定義:
bytes() 空bytes bytes(int) 指定字節的bytes,被0填充 bytes(iterable_of_ints) -> bytes [0,255]的int組成的可迭代對象 bytes(string,encoding[,errors]) -> bytes 等價於string.encode() bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer 從一個字節序列或者buffer複製出一個新的不可變的bytes對象 使用b前綴定義 只允許基本ASCII使用字符形式b'abc9' 使用16進製表示b'\x41\x61'
bytes操作:
和str類型類似,都是不可變類型,所以方法很多都一樣。只不過bytes方法,輸入是bytes,輸出是bytes In [1]: b'abcdef'.replace(b'f',b'k') Out[1]: b'abcdek' In [2]: b'abc'.find(b'b') Out[2]: 1 類方法bytes.fromhex(string): string必須是2個字符的16進制的形式,‘6162 6a 6b’,空格將被忽略 In [3]: bytes.fromhex('6162 09 6a 6b00') Out[3]: b'ab\tjk\x00' hex() 返回16進製表示的字符串 In [4]: 'abc'.encode().hex() Out[4]: '616263' 索引 In [6]: b'abcdef'[2] Out[6]: 99 返回該字節對應的數,int類型
bytearray定義
bytearray() 空bytearray bytearray(int) 指定字節的bytearray,被0填充 bytearray(iterable_of_ints) -> bytearray [0,255]的int組成的可迭代對象 bytearray(string,encoding[,errors]) -->bytearray 近似string.encode(),不過返回可變對象 bytearray(bytes_or_buffer) 從一個字節序列或者buffer複製出一個新的可變的bytearray對象 注意 ,b前綴定義的類型是bytes類型
bytearray操作
和bytes類型的方法相同 In [1]: bytearray(b'abcdef').replace(b'f',b'k') Out[1]: bytearray(b'abcdek') In [2]: bytearray(b'abc').find(b'b') Out[2]: 1 類方法bytearray.fromhex(string) string必須是2個字符的16進制的形式,'6162 6a 6b',空格將被忽略 In [3]: bytearray.fromhex('6162 09 6a 6b00') Out[3]: bytearray(b'ab\tjk\x00') hex() 返回16進製表示的字符串 In [5]: bytearray('abc'.encode()).hex() Out[5]: '616263' 索引 In [6]: bytearray(b'abcdef')[2] Out[6]: 99 返回該字節對應的數,int類型
操作:
append(int)尾部追加一個元素 insert(index,int)在指定索引位置插入元素 extend(iterable_of_ints)將一個可迭代的整數集合追加到當前bytearray pop(index=-1)從指定索引上移除元素,默認從尾部移除 remove(value)找到第一個value移除,找不到拋ValueError異常 注意,上述方法若需要使用int類型,值在[0,255] clear()清空bytearray reverse()翻轉bytearray,就地修改
舉例:
In [1]: b = bytearray() In [2]: b.append(97) In [3]: b.append(99) In [4]: b Out[4]: bytearray(b'ac') In [5]: b.insert(1,98) In [6]: b Out[6]: bytearray(b'abc') In [7]: b.extend([65,66,67]) In [8]: b Out[8]: bytearray(b'abcABC') In [9]: b.remove(66) In [10]: b Out[10]: bytearray(b'abcAC') In [11]: b.pop() Out[11]: 67 In [12]: b.reverse() In [13]: b Out[13]: bytearray(b'Acba') In [14]: b.clear() In [15]: b Out[15]: bytearray(b'')