这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/107424044
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!
写在开头的话
请记住:实践是掌握知识的最快方法
如果你只是怀着看看的态度去快速浏览文章,而不去认认真真的把文章里面讲的任何一个知识点去实践一遍,那么你永远也掌握不了它
生命不息,折腾不止!
Python: bytes、bytearray
00. 概述
Python3
引入两个新类型
bytes
不可变字节序列
bytearray
字节数组
可变
字符串与
bytes
字符串是字符组成的有序序列,字符可以使用编码来理解
bytes
是字节组成的有序的不可变序列
bytearray
是字节组成的有序的可变序列
编码与解码
字符串按照不同的字符集编码
encode
返回字节序列
bytes
encode(encoding=’utf-8′, errors=’strict’) -> bytes
字节序列按照不同的字符集解码
decode
返回字符串
bytes.decode(encoding=”utf-8″, errors=”strict”) -> str
bytearray.decode(encoding=”utf-8″, errors=”strict”) -> str
ascii
码表
01.bytes定义
定义
bytes()
空
bytes
bytes(int)
指定字节的
bytes
,被
0
填充
bytes(iterable_of_ints) -> bytes [0,255]
的
int
组成的可迭代对象
bytes(string, encoding[, errors]) -> bytes
等价于
string.encode()
bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
从一个字节序列或者
buffer
复制出 一个新的不可变的
bytes
对象
使用
b
前缀定义
只允许基本
ASCII
使用字符形式
b’abc9′
使用
16
进制表示
b”\x41\x61″
演示
print(bytes())
print(bytes(1))
print(bytes([97, 98, 65, 66, 67, 68]))
print(bytes(“pwd”, “utf-8”))
print(“pwd”.encode())
print(b”pwd”.decode())
a = b’pwd’
b = bytes(a)
print(a is b)
print(a == b)
print(id(a))
print(id(b))
print(type(b”abc”))
print(b”\x61\x62\x63″)
运行结果
b”
b’\x00′
b’abABCD’
b’pwd’
b’pwd’
pwd
True
True
2325249407856
2325249407856
b’abc’
02. bytes操作
和
str
类型类似,都是不可变类型,所以方法很多都一样。只不过
bytes
的方法,输入是
bytes
,输出是
bytes
b’abcdef’.replace(b’f’,b’k’)
b’abc’.find(b’b’)
类方法
bytes.fromhex(string)
string
必须是
2
个字符的
16
进制的形式,
‘6162 6a 6b’
,空格将被忽略
bytes.fromhex(‘6162 09 6a 6b00’)
hex()
返回
16
进制表示的字符串
‘abc’.encode().hex()
索引
b’abcdef'[2]
返回该字节对应的数,
int
类型
演示
print(b”pwd who am i “.replace(b”i”, b”who”))
print(b”who am i i love you”.split(b”i”))
print(bytes.fromhex(“61626309313233”))
print(“ABC”.encode().hex())
print(b”1234567ABCabc”[2])
print(b”1234567ABCabc”[8])
print(b”1234567ABCabc”[10])
运行结果
b’pwd who am who ‘
[b’who am ‘, b’ ‘, b’ love you’]
b’abc\t123′
414243
51
66
97
03. bytearray定义
定义
bytearray()
空
bytearray
bytearray(int)
指定字节的
bytearray
,被
0
填充
bytearray(iterable_of_ints) -> bytearray [0,255]
的
int
组成的可迭代对象
bytearray(string, encoding[, errors]) -> bytearray
近似
string.encode()
,不过返回可变对象
bytearray(bytes_or_buffer)
从一个字节序列或者
buffer
复制出一个新的可变的
bytearray
对象
注意,
b
前缀定义的类型是
bytes
类型
演示
print(bytearray([97, 98, 99]))
print(bytearray(“12345″, encoding=”utf”))
print(type(bytearray(“12345″, encoding=”utf”)))
print(type(“123456”.encode()))
print(type(bytearray(b”abcde”)))
运行结果
bytearray(b’abc’)
bytearray(b’12345′)
04. bytearray操作
和bytes类型的方法相同
bytearray(b’abcdef’).replace(b’f’,b’k’)
bytearray(b’abc’).find(b’b’)
类方法
bytearray.fromhex(string)
string
必须是2个字符的16进制的形式,‘6162 6a 6b’,空格将被忽略
bytearray.fromhex(‘6162 09 6a 6b00’)
hex()
返回
16
进制表示的字符串
bytearray(‘abc’.encode()).hex()
索引
bytearray(b’abcdef’)[2]
返回该字节对应的数,
int
类型
append(int)
尾部追加一个元素
insert(index, int)
在指定索引位置插入元素
extend(iterable_of_ints)
将一个可迭代的整数集合追加到当前bytearray
pop(index=-1)
从指定索引上移除元素,默认从尾部移除
remove(value)
找到第一个value移除,找不到抛 ValueError异常
注意:上述方法若需要使用
int
类型,值在[0, 255]
clear()
清空
bytearray
reverse()
翻转
bytearray
,就地修改
演示
b = bytearray(“abcdef”, encoding=”utf-8″)
print(type(b))
b.append(65)
print(b)
b.append(67)
print(b)
b.insert(2, 70)
print(b)
b.extend([97, 98, 99])
print(b)
b.pop()
print(b)
b.remove(97)
print(b)
for i in b:
print(“%s” % chr(i), end=” “)
print()
b.reverse()
print(b)
b.clear()
print(b)
运行结果
bytearray(b’abcdefA’)
bytearray(b’abcdefAC’)
bytearray(b’abFcdefAC’)
bytearray(b’abFcdefACabc’)
bytearray(b’abFcdefACab’)
bytearray(b’bFcdefACab’)
b F c d e f A C a b
bytearray(b’baCAfedcFb’)
bytearray(b”)
05. 进制转化
5.1 转化为十进制
二进制转化为十进制
print(int(“1101”, 2))
print(type(int(“1101”, 2)))
运行结果
13
八进制转化为十进制
print(int(“31”, 8))
运行结果
25
十六进制转化为十进制
print(int(“21”, 16))
运行结果
33
5.2 转化为二进制
十进制转化为二进制
print(bin(12))
print(bin(16))
运行结果
0b1100
0b10000
八进制转化为二进制
print(bin(0o12))
运行结果
0b1010
十六进制转化为二进制
print(bin(0x23))
运行结果
0b100011
5.3 转化为八进制
二进制转化为八进制
print(oct(0b111001))
运行结果
0o71
十进制转化为八进制
print(oct(13))
运行结果
0o15
十六进制转化为八进制
print(oct(0x16))
运行结果
0o26
5.4 转化为十六进制
二进制转化为十六进制
print(hex(0b11))
运行结果
0x3
八进制转化为十六进制
print(hex(0o12))
运行结果
0xa
十进制转化为十六进制
print(hex(11))
运行结果
0xb
5.10 十进制转化为其他进制
演示
print(format(10, ‘b’)) # 十进制转二进制
print(format(20, ‘o’)) # 十进制转八进制
print(format(15,’x’)) # 十进制转 十六进制
运行结果
1010
24
f
6. 类型转换
chr()
将整数转化为字符
ord()
将字符转化为整数值
演示
print(chr(97))
print(ord(‘w’))
运行结果
a
119
写在最后的话:
无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
欢迎关注我的CSDN博客,
IDYS’BLOG
持续更新内容
:
linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算
如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!