使用Python读取二进制数据

时间:2015-03-12 01:12:05

标签: python arrays numpy binaryfiles

我正在尝试读取包含格式化为平面二进制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数组中。我知道数组的大小以及用于从这些文件填充数组的方向。

感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

问题上有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)