一、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