【发布时间】:2011-03-11 04:09:26
【问题描述】:
我有 3000 个已知格式的二进制文件(每个大小为 40[MB])(每个“int32,float32”的“记录”有 5,000,000 个)。它们是使用numpy tofile() 方法创建的。
我使用的方法WhichShouldBeUpdated() 确定应该更新(3000 个文件中的)哪个文件,以及应该更改该文件中的哪些记录。该方法的输出如下:
(1)path_to_file_name_to_update
(2)一个带有N记录的numpy记录数组(N是要更新的记录数),格式如下:[(recordID1, newIntValue1, newFloatValue1), (recordID2, newIntValue2, newFloatValue2), .....]
可以看出:
(1) 仅在运行时才知道要更新的文件
(2) 要更新的记录也只在运行时才知道
用记录的新值更新文件的最有效方法是什么?
【问题讨论】:
-
也许我回答得太早了:record_ids 偏移到文件中了吗?如果我有recordId = 2,那是文件开头的第三条记录吗?如果是这样,seek 将起作用,您只需寻找 (2 * (4+4)) 并编写您的 8 字节打包结构。
-
是的,这就是文件的排列方式。问题是,这是最佳方式吗?使用 numpy.fromfile() 读取整个文件然后使用 cython 扫描数组会更好吗?
-
我更新了链接到 numpy.memmap 文档的答案。这可能是访问存储在磁盘上的 numpy 数组的最有效方式。