使用 Python 读取二进制数据

Reading Binary Data Using Python

我正在尝试读取包含格式为平面二进制 16 位带符号整数 big-endian 的网格化数据的文件。我正在使用 struct.unpack(),我认为这是正确的,因为它允许我指定数据是有符号的和大端的,但我不确定它是否将数据识别为 16 位。如果可能的话,有人可以确认这是读取我所描述的数据类型的正确方法。

>>>file_name = 'some_file.dat'
>>>file = open(file_name, 'rb')
>>>data = struct.unpact('>h', file.read())
>>>print(data)
(-9999,)

我想一次读取整个文件,并将数据插入到一个 numpy 数组中。我知道数组的维度和用于从这些文件填充数组的方向。

感谢您提供的所有帮助。

16 位有符号整数 are h; b is 8-bit。所以你想要 struct.unpack('>h', file.read()).

你的问题有 numpy 标签,所以我认为 numpy 的解决方案是可以接受的。您可以使用 numpy 的 fromfile 函数读取数据。 fromfile 允许您指定数据类型,包括字节顺序。例如,

In [1]: !hexdump x16.dat
0000000 00 01 01 01 ff ff 04 00 04 01 ff e8 00 00 00 f0
0000010

In [2]: x = np.fromfile('x16.dat', dtype='>i2')

In [3]: x
Out[3]: array([   1,  257,   -1, 1024, 1025,  -24,    0,  240], dtype=int16)