我正在尝试使用 python 读取一个非常大的 Fortran 无格式二进制文件。该文件包含 2^30 个整数。
我发现记录标记令人困惑(第一个是-2147483639),无论如何我已经实现了恢复数据结构(那些想要的整数都是相似的,因此与记录标记不同)并编写下面的代码(借助here)。
但是,我们可以看到每条记录的开头和结尾的标记并不相同。这是为什么?
是因为数据的大小太长( 536870910 = (2^30 - 4) / 2 )?但是 (2^31 - 1) / 4 = 536870911 > 536870910。
还是只是数据文件的作者犯了一些错误?
另一个问题,记录开头的标记类型是什么,int 还是 unsigned int?
fp = open(file_path, "rb")
rec_len1, = struct.unpack( '>i', fp.read(4) )
data1 = np.fromfile( fp, '>i', 536870910)
rec_end1, = struct.unpack( '>i', fp.read(4) )
rec_len2, = struct.unpack( '>i', fp.read(4) )
data2 = np.fromfile( fp, '>i', 536870910)
rec_end2, = struct.unpack( '>i', fp.read(4) )
rec_len3, = struct.unpack( '>i', fp.read(4) )
data3 = np.fromfile( fp, '>i', 4)
rec_end3, = struct.unpack( '>i', fp.read(4) )
data = np.concatenate([data1, data2, data3])
(rec_len1,rec_end1,rec_len2,rec_end2,rec_len3,rec_end3)
这是读取的记录长度值,如上所示:
(-2147483639, -2176, 2406, 589824, 1227787, -18)