【问题标题】:How does the writing process work in h5py Datasets?h5py 数据集中的编写过程是如何工作的?
【发布时间】:2020-07-03 18:56:17
【问题描述】:

我正在使用以下语法在 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 并只在磁盘上进行必要的更新。

【问题讨论】:

    标签: python io hdf5 h5py


    【解决方案1】:

    那么您是否研究过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]) 写入文件上的数据集;也就是说,它将修改文件对象的前 3 个元素。

    f.close()
    

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

    因为可以只加载数据集的一部分

    arr = dset[:3]
    

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

    【讨论】:

    • 好的,谢谢您的回答。我确实阅读了文档,但找不到专门说明这一点的行,所以我猜它是这样工作的,但我不确定,所以谢谢你的帮助。
    猜你喜欢
    • 2016-01-10
    • 2016-04-04
    • 2018-01-05
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2019-10-05
    • 2013-04-19
    相关资源
    最近更新 更多