在 Python 中读取二进制文件
-
用 Python 中的
open()
函数读取一个二进制文件 -
用 Python 中的
pathlib.Path
读取二进制文件 -
用 Python 中的
numpy.fromfile()
函数读取一个二进制文件
程序或内部处理器对二进制文件进行解释。它包含字节作为内容。当我们读取一个二进制文件时,会返回一个类型为 bytes
的对象。
用 Python 中的 open()
函数读取一个二进制文件
在 Python 中,我们有 open()
函数,用来创建一个文件对象,将文件的路径传给函数,并以特定的模式打开文件,默认为读模式。当我们打开二进制文件时,在以读、写或追加模式打开此类文件时,必须指定 b
参数。在本教程中,我们将处理二进制读取模式-rb
。
在下面的代码中,我们将读取一个二进制文件并从文件中打印一个字符。
with open("sample.bin","rb") as f:
data = f.read()
print(data[2])
输出:
83
如果我们打印单个字符,那么我们可以查看整数。
Python 有一个名为 struct
的包,它有很多方法,可以用来处理存储在文件、数据库等资源中的二进制数据。
struct.unpack()
用来读取打包后的数据,以指定的格式布局。这种布局在打包和解压数据时使用,是用格式字符指定的。这些格式字符以及它们的大小如下所示。
请注意,struct.unpack()
函数总是返回一个元组。
import struct
with open("sample.bin","rb") as f:
data = f.read()
unpack_result = struct.unpack('hhl', data[0:8])
print(unpack_result)
输出:
(1280, 27731, 7037801)
这里,hhl
表示短,短,长 int 作为数据格式布局,我们可以在输出中看到。这就是为什么解包的缓冲区只有 8 个字节,因为格式布局的大小是 8(2+2+4)。
用 Python 中的 pathlib.Path
读取二进制文件
我们也可以使用 pathlib
库中 Path
类中的 read_bytes()
方法,以字节模式读取文件,然后使用 struct.unpack()
函数解释数据,如前所述。
from pathlib import Path
import struct
data = Path('sample.bin').read_bytes()
multiple = struct.unpack('ii', data[:8])
print(multiple)
输出:
(1817380096, 7037801)
用 Python 中的 numpy.fromfile()
函数读取一个二进制文件
NumPy
模块中提供了另一种有趣的方法。使用该模块中的 fromfile()
函数,我们可以在使用 dtype()
函数指定格式数据后,从文件中读取二进制数据。这被认为是一种快速的方法。下面的代码展示了如何实现这个功能。
import numpy as np
with open('sample.bin') as f:
rectype = np.dtype(np.int32)
bdata = np.fromfile(f, dtype=rectype)
print(bdata)
输出:
[1817380096 7037801]
在这里,我们将格式类型指定为 32 位整数,并使用 fromfile()
函数提取数据。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn