如何在 Python 3 中将字节读取为流?

2025年1月4日 | 阅读 4 分钟

Python 字节流简介

在 Python 中处理字节流是一项重要的能力,尤其是在处理二进制文件或网络协议时。与处理字符串的文本流不同,字节流处理原始字节,允许您在更低的级别上与数据进行交互。Python 对字节流提供了全面的支持,这在各种情况下都很有用,包括读取图像、视频和其他二进制数据。

什么是字节?

字节是数字数据的一个单位,由八个比特组成。由于每个比特可以是 0 或 1,一个字节可以表示 256 种不同的值 (2^8)。字节是计算机中二进制数据表示的基本构建块。

理解字节流

字节流是一系列字节,可以按顺序读取和写入。字节流通常用于输入和输出操作,包括处理非人类可读格式的数据,例如图像、音频文件和网络数据包。

Python 的字节流类

Python 的内置 io 模块提供了几个用于处理字节流的类。最常用的类包括:

  • BytesIO:内存中的字节流。
  • BufferedReader:用于读取的缓冲二进制数据。
  • FileIO:低级文件处理。

使用 BytesIO

当您需要在内存中读取或写入字节时,BytesIO 类非常有用,这对于测试或处理少量数据特别方便。

创建 BytesIO 对象

要创建 BytesIO 对象,请从 io 模块导入它,并使用可选的字节数据对其进行初始化。

语法

从 BytesIO 读取

您可以使用 read、readline 或 seek 等方法从 BytesIO 对象读取数据。

代码

输出

 
b'Hello, World!'
b'Hello, World!'   

向 BytesIO 写入

write 方法允许您将字节写入 BytesIO 对象。

代码

输出

 
b'Python is awesome!'   

使用 BufferedReader

BufferedReader 类支持缓冲二进制数据读取,通过减少 I/O 操作次数来提高效率。

创建 BufferedReader 对象

您可以通过包装 FileIO 形式的字节流来创建 BufferedReader 对象。

语法

从 BufferedReader 读取

与 BytesIO 类似,您可以使用 read、readline 和 seek 函数从 BufferedReader 读取数据。

代码

输出

 
b'Python is'
b' awesome!'   

使用 FileIO

FileIO 类定义了用于读写二进制文件的低级接口。它是所有文件操作的基础类。

创建 FileIO 对象

要创建 FileIO 对象,请以二进制模式打开文件。

语法

从 FileIO 读取

您可以通过调用 read 和 seek 等方法从 FileIO 对象读取数据。

代码

输出

 
b'Python is awesome!'
b'Python is'   

示例:使用 struct 读取二进制数据

Python 的 struct 模块可用于在给定格式内将字节解释为打包的二进制数据。

代码

输出

 
16909060
67305985   

结论

总之,在 Python 3 中,将字节作为流读取是高效处理二进制数据的一项基本操作。'io' 模块的类,如 'BytesIO'、'BufferedReader' 和 'FileIO',提供了灵活且高效的字节流处理方法。无论您是使用 'BytesIO' 进行内存操作、通过缓冲 I/O 提高效率,还是使用 'FileIO' 进行低级文件操作,Python 都提供了强大的功能来管理二进制数据。掌握这些概念和方法,可以使您处理图像和音频文件、网络数据包和硬件接口等各种二进制数据,从而确保应用程序中精确高效的数据处理。