Python 字节
最后修改于 2024 年 1 月 29 日
在本文中,我们将展示如何在 Python 中使用字节类型。
bytes
类型是不可变的字节序列。该序列由 0 到 255 范围内的整数组成。此数据类型用于存储数据和数据传输。
当我们打开网络套接字、处理串行 I/O 或打开二进制文件时,我们使用 bytes
类型。
Python 有一个可变的等效于 bytes
类型的类型,称为 bytearray
。
字节字符串是字节类型的人类可读表示形式。它由两个单引号、双引号或三引号之间的一系列 ASCII 字符组成。字节字符串以 b
字符为前缀。对于可打印的 ASCII 字符,使用相应的字符。对于换行符、制表符、回车符和 \ 字符,使用转义序列 \n、\t、\r 和 \\。对于任何其他值,使用十六进制转义序列,例如 \xc4
或 \xc5
。
字节类型的每个单个元素都是一个整数。 字节切片返回一个切片。
Python 字节示例
在第一个示例中,我们开始使用 bytes
类型。
#!/usr/bin/python s = 'фальконет' print(s) print(len(s)) e = s.encode('utf8') print(e) print(len(e)) v = bytes('фальконет', 'utf8') print(v) w = b'\xd1\x84\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe\xd0\xbd\xd0\xb5\xd1\x82' print(w) print('-------------------------') print(e.decode('utf8')) print(v.decode('utf8')) print(w.decode('utf8'))
在该示例中,我们定义一个 Unicode 字符串并将其转换为字节类型。然后,我们将其转换回 Unicode 字符串。
s = 'фальконет' print(s) print(len(s))
我们定义一个 Unicode 字符串,并打印它及其字符大小。
e = s.encode('utf8') print(e)
我们将字符串编码为字节类型。
print(len(e))
我们打印字节字符串中的字节数。
v = bytes('фальконет', 'utf8')
我们可以使用内置的 bytes
函数获取字节类型。
w = b'\xd1\x84\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe\xd0\xbd\xd0\xb5\xd1\x82' print(w)
我们定义一个字节字符串。
print(e.decode('utf8')) print(v.decode('utf8')) print(w.decode('utf8'))
这里我们将三个字节解码为 Unicode 字符串。
$ ./main.py фальконет 9 b'\xd1\x84\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe\xd0\xbd\xd0\xb5\xd1\x82' 18 b'\xd1\x84\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe\xd0\xbd\xd0\xb5\xd1\x82' b'\xd1\x84\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe\xd0\xbd\xd0\xb5\xd1\x82' ------------------------- фальконет фальконет фальконет
Python 传输字节
网络上的数据以字节类型传输。
#!/usr/bin/python import requests url = 'http://webcode.me/small.txt' req = requests.get(url) print(req.content) print(req.content.decode('utf8'))
我们生成对小型文本资源的 GET 请求。
print(req.content)
打印请求内容,我们得到一个字节字符串。
print(req.content.decode('utf8'))
我们使用 decode
将字节字符串转换为 Unicode 字符串。
$ ./main.py b'small text page\n' small text page
Python 字节读取二进制
当我们以二进制模式打开文件时,我们以字节形式检索数据。
Dnes bol krásny deň. Dážď bubnoval na okenice.
我们有这个文本文件。
#!/usr/bin/python with open('data.txt', 'rb') as f: lines = f.readlines() print(lines) for line in lines: print(line.decode().rstrip())
我们以二进制模式读取文本文件。
with open('data.txt', 'rb') as f:
我们以 rb
模式打开文本文件。
lines = f.readlines()
我们获得一个字节字符串列表。
for line in lines: print(line.decode().rstrip())
我们遍历列表并打印解码后的行。
$ ./main.py [b'Dnes bol kr\xc3\xa1sny de\xc5\x88. \r\n', b'D\xc3\xa1\xc5\xbe\xc4\x8f bubnoval na okenice.'] Dnes bol krásny deň. Dážď bubnoval na okenice.
Python 字节表示
在以下示例中,我们以不同的数字系统表示字节。
#!/usr/bin/python from more_itertools import sliced s = 'château' print(s) v = s.encode('utf8') print(v) h = v.hex() print(h) d = list(sliced(h, 2)) print(d) i = int(h, 16) b = bin(i) print(i) print(b) print(bytes.fromhex(f'{int(b, 2):x}').decode('utf8'))
我们将法语单词 château 转换为字节类型。 然后以十六进制、整数和二进制值显示该类型。
s = 'château' print(s)
我们定义一个 Unicode 字符串。
v = s.encode('utf8') print(v)
该字符串被编码为字节字符串。
h = v.hex() print(h)
我们将字节字符串转换为十六进制字符串。
d = list(sliced(h, 2)) print(d)
我们将十六进制字符串转换为十六进制值列表。
i = int(h, 16)
我们将十六进制字符串转换为整数。
b = bin(i)
十进制整数转换为二进制。
print(bytes.fromhex(f'{int(b, 2):x}').decode('utf8'))
我们将二进制转换回 Unicode 字符串。
$ ./main.py château b'ch\xc3\xa2teau' 6368c3a274656175 ['63', '68', 'c3', 'a2', '74', '65', '61', '75'] 7163190309837693301 0b110001101101000110000111010001001110100011001010110000101110101 château
来源
在本文中,我们使用了 Python 中的字节类型。
作者
列出所有 Python 教程。