python使用字节处理文件

字节模式指以二进制方式读写文件,使用 rb/wb 等模式可避免编码转换,适用于处理图像、音频等非文本文件,操作时需注意数据类型为 bytes,大文件应分块读取。

在Python中处理文件时,使用字节(bytes)模式可以更精确地操作二进制数据。这种模式适用于图像、音频、视频、压缩包等非文本文件,也用于需要避免编码问题的场景。

什么是字节模式?

默认情况下,Python以文本模式打开文件,会自动进行字符编码(如UTF-8)。而以字节模式打开文件时,读取和写入的是原始字节数据,不会做任何编码转换。

通过在文件打开模式中添加 b 标志(如 rbwb),即可进入字节模式。

如何用字节模式读写文件

以下是一些常见操作示例:

读取二进制文件:

with open('example.jpg', 'rb') as f:
    data = f.read()
    print(data[:10]) # 打印前10个字节

写入二进制文件:

with open('output.bin', 'wb') as f:
    f.write(b'\x48\x65\x6c\x6c\x6f') # 写入"Hello"的ASCII字节

复制文件(保持原始数据):

with open('source.png', 'rb') as src:
    content = src.read()

with open('copy.png', 'wb') as dst:
    dst.write(content)

字节与字符串的转换

在处理字节数据时,经常需要在 strbytes 之间转换:

  • str → bytes:使用 .encode() 方法,例如:'hello'.encode('utf-8')
  • bytes → str:使用 .decode() 方法,例如:b'hello'.decode('utf-8')

注意:对非文本数据(如图片)不能随意解码,否则会出错或损坏数据。

适用场景与注意事项

使用字节模式适合以下情况:

  • 处理非文本文件(图片、音频、可执行文件等)
  • 网络传输或协议解析中需要精确控制数据格式
  • 避免因编码不一致导致的乱码问题

注意事项:

  • 不要用文本模式打开二进制文件,可能导致数据被修改(如Windows中换行符转换)
  • 读取大文件时建议分块处理,避免内存溢出:
with open('large_file.zip', 'rb') as f:
    chunk_size = 1024
    while chunk := f.read(chunk_size):
        process(chunk) # 处理每一块数据

基本上就这些。只要记住:涉及非文本内容,就用 rbwb 模式,操作的是 bytes 类型数据,就不会出错。