Python中str、bytes与bytearray类型详解及转换方法
本文详细解析Python3中str、bytes和bytearray三种数据类型的区别与联系。重点讲解str与bytes之间的encode/decode及构造函数转换方式,深入剖析bytearray作为可变字节序列的初始化参数规则及常用操作方法,并对比bytes不可变与bytearray可变的特性,提供完整的类型间转换示例。
在Python3中,文本数据与二进制数据被明确区分开来。文本采用Unicode编码,对应str类型,主要用于展示;二进制数据则对应bytes类型,适用于存储和传输场景。其中,bytes本质上是字节的序列,而str则是Unicode字符的序列。
str类型示例如下:
>>> s = u'你好' >>> s '你好' >>> type(s) <class 'str'>
bytes类型示例如下:
>>> b = b'abc' >>> b b'abc' >>> type(b) <class 'bytes'>
str与bytes之间的转换逻辑为:str通过encode()方法转换为bytes,bytes再通过decode()方法还原为str。
第一种转换方式是利用encode()和decode()方法。
>>> a = u'你好'
>>> b = a.encode('utf-8')
>>> b
b'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> type(b)
<class 'bytes'>
>>> new_a = b.decode('utf-8')
>>> new_a
'你好'
>>> type(new_a)
<class 'str'>
第二种转换方式是利用bytes()构造函数和str()构造函数。
>>> a = u'你好' >>> b= bytes(a, encoding='utf-8') >>> b b'\xe4\xbd\xa0\xe5\xa5\xbd' >>> type(b) <class 'bytes'> >>> new_a = str(b, encoding='utf-8') >>> new_a '你好' >>> type(new_a) <class 'str'>
接下来介绍bytearray类型。
bytearray类表示一个值在0 <= x < 256范围内的可变字节序列。
初始化bytearray时,源参数可以有多种传入方式:
若源参数为字符串,则必须指定编码(以及可选的错误处理)参数;bytearray()内部会调用str.encode()将字符串转换为字节。 若源参数为整数,则创建的数组大小等于该整数,并用空字节(null bytes)进行初始化。 若源参数为符合缓冲区接口的对象,则使用该对象的只读缓冲区来初始化字节数组。 若源参数为可迭代对象,则其元素必须是值在0 <= x < 256范围内的整数,这些整数将作为数组的初始内容。 若不传入任何参数,则创建一个长度为0的空数组。
当源参数是字符串时,示例如下:
>>> b = bytearray(u'你好', encoding='utf-8') >>> b bytearray(b'\xe4\xbd\xa0\xe5\xa5\xbd') >>> type(b) <class 'bytearray'>
当源参数是整数时,示例如下:
>>> b = bytearray(5) >>> b bytearray(b'\x00\x00\x00\x00\x00') >>> type(b) <class 'bytearray'>
当源参数是可迭代对象时,该迭代对象中的元素必须满足0 <= x < 256的条件:
>>> b = bytearray([1, 2, 3, 4, 255]) >>> b bytearray(b'\x01\x02\x03\x04\xff') >>> type(b) <class 'bytearray'
bytes与bytearray的主要区别在于:
bytes类型是不可变的,这与str类似;而bytearray类型是可变的,这与list类似。
>>> b = bytearray() >>> b bytearray(b'') >>> b.append(10) >>> b bytearray(b'\n') >>> b.append(100) >>> b bytearray(b'\nd') >>> b.remove(100) >>> b bytearray(b'\n') >>> b.insert(0, 150) >>> b bytearray(b'\x96\n') >>> b.extend([1, 3, 5]) >>> b bytearray(b'\x96\n\x01\x03\x05') >>> b.pop(2) 1 >>> b bytearray(b'\x96\n\x03\x05') >>> b.reverse() >>> b bytearray(b'\x05\x03\n\x96') >>> b.clear() >>> b bytearray(b'')
bytes与bytearray之间的相互转换方法如下:
>>> b = b'abcdef' >>> bay = bytearray(b) >>> bay bytearray(b'abcdef') >>> b = bytes(bay) >>> b b'abcdef'
bytearray与str之间的相互转换方法如下:
>>> a = 'abcdef' >>> b = bytearray(a, encoding='utf-8') >>> b bytearray(b'abcdef') >>> a = b.decode(encoding='utf-8') >>> a 'abcdef'
总结
以上内容介绍了Python中str、bytes和bytearray三种类型的详细解析及转换方法,希望能对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









