使用 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)
我正在尝试读取包含格式为平面二进制 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)