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