使用numpy.fromfile文件读取分散的二进制数据

2024-05-29 04:17:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用一个numpy.fromfile调用读取二进制文件中的不同块。每个块的格式如下:

OES=[
('EKEY','i4',1), 
('FD1','f4',1),
('EX1','f4',1),
('EY1','f4',1),
('EXY1','f4',1),
('EA1','f4',1),
('EMJRP1','f4',1),
('EMNRP1','f4',1),
('EMAX1','f4',1),
('FD2','f4',1),
('EX2','f4',1),
('EY2','f4',1),
('EXY2','f4',1),
('EA2','f4',1),
('EMJRP2','f4',1),
('EMNRP2','f4',1),
('EMAX2','f4',1)]

以下是二进制文件的格式:

^{pr2}$

我知道我想要的数据和无用数据之间的字节增量。我也知道我想要的每个数据块的大小。在

到目前为止,我通过在文件对象f上搜索,然后调用:

nparr = np.fromfile(f,dtype=OES,count=size)

因此,对于我想要的每个数据块,我有一个不同的nparr,并将所有numpy数组连接到一个新数组中。在

我的目标是拥有一个包含我想要的所有块的单个数组,而无需连接(出于内存目的)。也就是说,我只想调用nparr = np.fromfile(f,dtype=OES)一次。有没有办法实现这个目标?在


Tags: 文件数据numpy目标格式np二进制数组
1条回答
网友
1楼 · 发布于 2024-05-29 04:17:18

That is, I want to call nparr = np.fromfile(f,dtype=OES) only once. Is there a way to accomplish this goal?

不,不需要调用fromfile()。在

但如果您事先知道文件的完整布局,则可以预先分配数组,然后使用fromfile和{}将OES块直接读入预分配的数组中。例如,假设您知道每个OES块的文件位置,并且知道每个块中的记录数。也就是说,你知道:

file_positions = [position1, position2, ...]
numrecords = [n1, n2, ...]

然后您可以这样做(假设f是已经打开的文件):

^{pr2}$

相关问题 更多 >

    热门问题