Python中string,bytes和bytearray类型

488 阅读2分钟

「这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战

python中对文本(字符串,即string和Unicode编码)用于显示和二进制数据(bytes)主要用于存储和传输

做了如下区分:

字节类型区别:python中有 string类型 bytes类型(二进制字符串) bytearray类型
注意:bytearray类 是range 0<=x<256的一个可变序列.

对类型的讲解(bytes和bytearray) 字节 和 字节的一种类型组合

bytes是byte是序列,而str是unicode的序列。

(11111)string和bytes之间的转换关系:

温故而知新:
1.编码:encode() 把字符串进行编码,成二进制的数据
2.解码:decode() 把二进制的数据解码成字符串

str类型: bytes类型:

a = u'吴'                     l = b'zhang'        #b''表示二进制字符串类型(作用:存储图片,音频,电影),序列类型,不可变类型
print(type(a))                  print(type(l)) 

输出为<class'str'> 输出为<class'bytes'>

(((注意:
str类型:
z = u'吴' z = '吴'
print(z) print(z)
两个执行结果都为 吴
print(type(z)) print(type(z))
运行结果都是class 'str'
u的作用:编码器中有个默认的对字符串的unicode操作。写不写U一样。即为str类型。)))

str和bytes之间的转换关系:

str-->encode()-->bytes-->decode()解码-->str   

(即str类型一编码(encode)则变成bytes类型,bytes类型一解码(decode)就变成str类型)

第一种方法: 第二种方法:

z = u'张是傻'
b = z.encode('utf-8')                                            b = bytes(z,encoding='utf-8')#编码过程
print(b)                     
#'张是傻'的utf-8编码:(即输出)  b'\xe5\xa8\xe6\x80\xa1\xe6\x98\xaf\xe5\x82\xbb\xe9\x80\xbc'
print(type(b))                     
#输出:      <class 'bytes'>
new_z = b.decode('utf-8')                                        new_z = str(b,encoding='utf-8')#解码过程
print(new_z)                        
#还原了,输出为:'张是傻'
print(type(new_z))                   
#输出为:   <class 'str'>

(22222)bytearray类型: 范围很广(int,字符串,参数,对象)

注意:bytearray类型是range 0<=x<256的一个可变序列。如果超出255则会报错。
对应的bytes就是二进制字符串的不可变的类型

1.参数是字符串:必须给出编码以及可选的错误参数,然后使用str.encode()将字符串转换为字节

b = bytearray(u'未来的说', encoding='utf-8')   # 参数里面进行编码
编码格式:\xe6\x9c\xaa\xe6\x9d\xa5\xe7
print(b)
print(type(b))

2.参数是int

b = bytearray(23)   # 编码格式:\x00的个数    本代码行是23print(b)
print(type(b))

3.参数是list 可迭代(相当于循环,可用for去遍历访问)的一个对象

b = bytearray([0,2, 4,5])     结果:bytearray(b'\x00\x02\r\x04\x05'#x代表数字,00是两个十六进制数。
print(b)

(33333)bytes和bytearray(二进制数组)的相互转换:

bytes和bytearray的转换:

s = b'wu'
b = bytearray(s)       就把bytes类型的wu转换成了bytearray
z = bytes(b)           就把bytearray类型转换为了bytes

因为byte和bytearray都是同一类型(字节),所以不用encode以及decode

bytearray和str的转化:

s = 'wu'
b = bytearray(s,encoding='utf-8')

把str类型转换为bytearray类型

z = b.decode(encoding='utf-8')      等价于 c = b.decode('utf-8')  或 c = str(b, encoding='utf-8')

把bytearray类型转换为str类型