h5py 数据集中的写作过程如何工作?



我使用以下语法在 Python 中覆盖 hdf5 文件的一部分:

import h5py
f = h5py.File(file_path, 'r')
dset = f["mykey"]
dset[:3] = [1,2,3]
f.close()

它似乎正在工作,但我无法在文档中找到有关如何进行此更新的信息。我想知道数据集是否 (1( 加载到内存中,(2( 更新,(3( 完全写回,或者它是否只是更新磁盘上的数据。

我问这个是因为我想为 npy 文件重新编码它,我可以选择加载数据、更新和重写数据,或者只是使用 seek 并仅在磁盘上进行必要的更新。

那么你有没有研究过h5py文档,尤其是关于数据集的页面? 一切都在那里。

以下是我从阅读这些文档和回答各种 SO 中推断出来的。

f = h5py.File(file_path, 'r')
dset = f["mykey"]

dset是位于文件上的数据集对象。

arr = dset[:]

将数据集加载到 numpy 数组中。

dset[:3] = [1,2,3]

另一方面,这会将np.array([1,2,3])写入文件上的数据集;也就是说,它将修改 File 对象的前 3 个元素。

f.close()

由于缓冲等原因,在fflushedclosed之前,该写入实际上可能不会发生。

由于可以只加载数据集的一部分

arr = dset[:3]

我推断它可以在不加载整个dset的情况下执行写入。 实际的代码是python,c ++的混合,cython作为桥梁。