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')