一、python3对文本和二进制数据做了区分。文本是Unicode编码,str类型,用于显示。二进制类型是bytes类型,用于存储和传输。bytes是byte的序列,而str是unicode的序列。
str类型:
1
2
3
4
5
|
>>> s = u '你好' >>> s '你好' >>> type (s) < class 'str' > |
bytes类型:
1
2
3
4
5
|
>>> b = b 'abc' >>> b b 'abc' >>> type (b) < class 'bytes' > |
二、str和bytes之间的转换关系:str-->encode()-->bytes-->decode()-->str
转换方式一:encode(),decode()
1
2
3
4
5
6
7
8
9
10
11
|
>>> 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()
1
2
3
4
5
6
7
8
9
10
11
|
>>> 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类是range 0 < = x < 256的一个可变序列。
可选的源参数可以用几种不同的方式来初始化数组:
•如果它是一个字符串,那么您还必须给出编码(以及可选的错误)参数;bytearray()然后使用str.encode()将字符串转换为字节。
•如果它是一个整数,那么数组将具有这个大小,并将用null字节初始化。
•如果它是符合缓冲区接口的对象,则将使用对象的只读缓冲区来初始化字节数组。
•如果它是可迭代的,那么它必须是range 0 < = x < 256的整数的迭代,它被用作数组的初始内容
•如果没有参数,则创建一个大小为0的数组。
当源参数是一个字符串时:
1
2
3
4
5
|
>>> b = bytearray(u '你好' , encoding = 'utf-8' ) >>> b bytearray(b '\xe4\xbd\xa0\xe5\xa5\xbd' ) >>> type (b) < class 'bytearray' > |
当源参数是一个整数时:
1
2
3
4
5
|
>>> b = bytearray( 5 ) >>> b bytearray(b '\x00\x00\x00\x00\x00' ) >>> type (b) < class 'bytearray' > |
当源参数是一个可迭代对象,那么这个迭代对象的元素都必须符合0 <= x < 256:
1
2
3
4
5
|
>>> 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。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
>>> 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转换
1
2
3
4
5
6
7
|
>>> b = b 'abcdef' >>> bay = bytearray(b) >>> bay bytearray(b 'abcdef' ) >>> b = bytes(bay) >>> b b 'abcdef' |
六、bytearray和str转换
1
2
3
4
5
6
7
|
>>> a = 'abcdef' >>> b = bytearray(a, encoding = 'utf-8' ) >>> b bytearray(b 'abcdef' ) >>> a = b.decode(encoding = 'utf-8' ) >>> a 'abcdef' |
总结
以上所述是小编给大家介绍的详解python string类型 bytes类型 bytearray类型,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
原文链接:http://www.cnblogs.com/gundan/archive/2017/12/16/8047315.html