python数据类型补充
基础
- bytes和bytearray为python3引入的两个新类型
- 所有的数据其实都可以转换为字节的数组
字符串和bytes的区别
- 字符串是字符组成的有序序列,字符可以使用编码来理解
- bytes是字节组成的有序的不可变的序列
- bytearray是字节组成的有序的可变的序列
编码与解码
- 字符串按照不容的字符集编码encode返回字节序列:bytes
str.encode(encoding="utf-8",errors="strict")
- 字节序列按照不同的字符集,解码decode返回字符串
bytes.decode(encoding="utf-8",errors="strict")
bytearray.decode(encoding="utf-8",errors="strict")
一、bytes
bytes是不可变的字节序列
定义
- bytes() 表示空bytes
- bytes(int) 指定字节的bytes,被0填充
- bytes(iterable_of_list) [0,255]的int组成的可迭代对象 “iterable_of_list” 表示可迭代的对象
- bytes(string,encoding,errors),等价于string.encode()
- bytes(bytes_or_buffer) 从一个字节序列或者buffer复制楚一个新的不可变的bytes对象
使用b前缀的定义
- 只允许基本ASCII使用字符形式 b‘abc9’
- 使用16进制表示 b’\x41\x61’
bytes的操作
replace find
- 例如replace 替换,使用方式和字符串相同
- 例如find ,查找元素,使用方式和字符串相同
print(b'abcdef'.replace(b'f',b'k'))
print(b'abcdef'.find(b'f'))
===============执行结果===========
b'abcdek'
5
hex
- 返回16禁止表示的字符串
n= "abc".encode().hex()
print(n)
===============执行结果===========
616263
split
m=b'abcdef'.split(b'c')
print(m)
===============执行结果===========
[b'ab', b'def']
索引
和字符串取值i相似,bytes的取值也是使用下标索引,只传索引的时候,返回的数值是int型
m=b'abcdef'[2]
print(m)
===============执行结果===========
99
二、bytearray
bytearray为可变的字节数组
定义
- bytearray() 表示空bytearray
- bytearray(int) 指定字节的bytearray,被0填充
- bytearray(iterable_of_list) bytearray[0,255]的int组成的可迭代对象 “iterable_of_list” 表示可迭代的对象
- bytearray(string,encoding,errors),bytearray近似于string.encode(),不过返回的是可变对象
- bytes(bytes_or_buffer) 从一个字节序列或者buffer复制一个新的可变的bytes对象
- 注意 ,b前缀定义的类型为bytes类型
bytearray的操作
replace find
- 例如replace 替换,使用方式和字符串相同
- 例如find ,查找元素,使用方式和字符串相同
print(bytearray(b'abcdef').replace(b'f',b'k'))
print(bytearray(b'abcdef').find(b'f'))
===============执行结果===========
bytearray(b'abcdek')
5
hex
- 返回16禁止表示的字符串
n= bytearray("abc".encode()).hex()
print(n)
===============执行结果===========
616263
split
m=bytearray(b'abcdef').split(b'c')
print(m)
===============执行结果===========
[bytearray(b'ab'), bytearray(b'def')]
索引
和字符串取值i相似,bytes的取值也是使用下标索引,只传索引的时候,返回的数值是int型
m=bytearray(b'abcdef')[2]
print(m)
===============执行结果===========
99
修改 append instert extend pop remove clear reverse
- append(int) 尾部追加元素
- instert(index,int) 指定索引的位置插入元素
- extend(iterable_of_list) 将一个可迭代的整数集合追加到当前bytearray
- pop(index=1) 从指定的位置上移除元素,默认删除最后一个
- remove(value) 找到第一个value后删除,找不到就抛出异常
- 注意:以上方法若需要使用int类型,数值要在0(含)-255(含)之间
- clear()清空 bytearray
- reberse()反转倒叙bytearray
b = bytearray()
b.append(97)
print("appennd:",b)
b.append(99)
print("appennd:",b)
b.insert(1,98)
print("insert:",b)
b.extend([65,66,67])
print("extend:",b)
b.remove(66)
print("remove:",b)
b.pop()
print("pop:",b)
b.reverse()
print("reverse:",b)
b.clear()
print("clear:",b)
================执行结果===================
appennd: bytearray(b'a')
appennd: bytearray(b'ac')
insert: bytearray(b'abc')
extend: bytearray(b'abcABC')
remove: bytearray(b'abcAC')
pop: bytearray(b'abcA')
reverse: bytearray(b'Acba')
clear: bytearray(b'')