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

Python bytes字节类型详解(附带实例)

字节(bytes)在 Python 中常用于处理二进制数据。在实际开发中我们更多地使用字符串来处理文本,但处理原始的二进制数据时,比如文件内容、网络传输数据或编码转换,就常用字节类型。

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

字节对象可以用以下几种方式创建:


创建字节对象实例如下:

# 使用 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 范围。

在 Python 3 中,bytes 和 str 被明确区分开,bytes 适合处理低级数据,而 str 适合处理人类可读的文本。要创建字节对象,通常在普通字符串前加一个 b 前缀,或者使用 bytes() 函数。

Python bytes字节的基本操作

1) 索引与切片

字节对象是一个序列,可以通过索引或切片访问其中的字节。索引返回的是整数(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 类型,不能直接与字符串混合。例如:

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) 字节与文件操作

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

# 写入字节到文件
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, 世界

相关文章