首页 > 编程笔记 > Python笔记 阅读:35

Python bytes字节类型的用法(非常详细)

bytesPython 中的字节类型,是用来处理二进制数据的。

在实际开发时,虽然我们更多地使用字符串来处理文本,但处理原始的二进制数据时,比如文件内容、网络传输数据或编码转换时,bytes 类型就派上用场了。
 

在 Python 中,bytes 类型表示一个不可变的字节序列,每个字节是一个 0 到 255 之间的整数(即 8 位二进制数),通常用来存储和处理二进制数据。
 

Python 程序中创建字节对象的方式有以下几种:


例如:

# 使用 b 前缀
b1 = b"Python"
print(b1)  # 输出 b'Python'

# 从列表创建
b2 = bytes([80, 121, 116, 104, 111, 110])
print(b2)  # 输出 b'Python'

# 从字符串编码
s = "你好"
b3 = s.encode("utf-8")
print(b3)  # 输出 b'\xe4\xbd\xa0\xe5\xa5\xbd'

注意:b"Python" 是 ASCII 编码的字节,而 "你好" 编码成 UTF-8 后显示为十六进制表示,因为它超出了 ASCII 范围。


注意,字节类型(bytes)和字符串类型(str)有很相似,它们的本质区别是:字符串是基于字符的文本数据,而字节是纯粹的二进制数据。在 Python 3 中,bytes 和 str 被明确区分开,bytes 适合处理低级数据,而 str 适合处理人类可读的文本。

要创建字节对象,通常在普通字符串前加一个 b 前缀,或者使用 bytes() 函数。

Python bytes类型的常见操作

1) 索引与切片

bytes 对象是一个序列,可以通过索引或切片访问其中的字节。索引返回的是整数(0-255),而不是字符。

例如:

b = b"Hello"
print(b[0])      # 索引:输出 72(H 的 ASCII 值)
print(b[1:4])    # 切片:输出 b'ell'
print(b[::-1])   # 输出 b'olleH'(反转)

由于字节是不可变的,不能通过索引修改其内容,比如 b[0] = 65 会报错。

2) 拼接与重复

bytes 对象支持用 + 拼接和用 * 重复,但操作数必须都是 bytes 类型,不能直接与字符串混合。

例如:

b1 = b"Py"
b2 = b"thon"
b3 = b1 + b2    # 拼接
b4 = b1 * 3     # 重复
print(b3)       # 输出 b'Python'
print(b4)       # 输出 b'PyPyPy'

3) 字节和字符串的转换

字节和字符串之间的转换是 bytes 类型使用的核心。转换需要指定编码方式,常见编码包括 "utf-8"、"ascii" 等。


使用 encode() 方法将字符串转换为字节:

s = "Hello, 世界"
b = s.encode("utf-8")
print(b)  # 输出 b'Hello, \xe4\xb8\x96\xe7\x95\x8c'


使用 decode() 方法将字节转换为字符串:

b = b'Hello, \xe4\xb8\x96\xe7\x95\x8c'
s = b.decode("utf-8")
print(s)  # 输出 Hello, 世界

注意,编码和解码时必须使用相同的编码方式,否则会抛出 UnicodeDecodeError

4) 字节的常用方法

bytes 类型支持一些与字符串类似的方法,但返回结果通常是 bytes 类型。以下是几个常用方法:
 

方法 功能 示例
hex() 转换为十六进制字符串 b"ab".hex() 返回 "6162"
find(sub) 查找子字节的位置 b"Python".find(b"th") 返回 2
replace(old, new) 替换子字节 b"cat".replace(b"c", b"b") 返回 b"bat"
split(sep) 按分隔符拆分 b"a,b".split(b",") 返回 [b"a", b"b"]

例如:

b = b"Python Programming"
print(b.find(b"Pro"))    # 输出 7
print(b.replace(b"P", b"Q"))  # 输出 b"Qython Qrogramming"
print(b.split(b" "))     # 输出 [b'Python', b'Programming']

5) 字节与文件操作

bytes 类型在文件读写中非常常见,因为文件内容本质上是二进制数据。

例如:

# 写入字节到文件
with open("test.bin", "wb") as f:
    f.write(b"Binary Data")

# 读取字节
with open("test.bin", "rb") as f:
    data = f.read()
    print(data)  # 输出 b'Binary Data'

上述代码使用了 "wb"(写二进制)和 "rb"(读二进制)模式,专门处理字节数据。

总结

在 Python 程序中,使用 bytes 字节类型需要注意以下几点:

读完全文,你已经学会 Python bytes 字节类型的用法,下面的实例运用了编码解码的知识,将用户输入的文本编码为字节并解码回字符串:

text = input("请输入文本:")
byte_data = text.encode("utf-8")
print(f"字节表示:{byte_data}")
decoded_text = byte_data.decode("utf-8")
print(f"解码结果:{decoded_text}")

运行程序,输出结果为:

请输入文本:Hello, 世界
字节表示:b'Hello, \xe4\xb8\x96\xe7\x95\x8c'
解码结果:Hello, 世界

相关文章