我正在使用 h5py 将数值工作的中间数据存储在 HDF5 文件中。我的项目处于版本控制之下,但这不适用于 HDF5 文件,因为每次重新运行生成 HDF5 文件的脚本时,即使其中的数据没有变化,二进制文件也会发生变化。
这是一个小例子来说明这一点:
In [1]: import h5py, numpy as np
In [2]: A = np.arange(5)
In [3]: f = h5py.File('test.h5', 'w'); f['A'] = A; f.close()
In [4]: !md5sum test.h5
7d27c258d94ed5d06736f6d2ba7c9433 test.h5
In [5]: f = h5py.File('test.h5', 'w'); f['A'] = A; f.close()
In [6]: !md5sum test.h5
c1db5806f1393f2095c88dbb7efeb7d3 test.h5
In [7]: # the file has changed but still contains the same data!
我查看了 HDF5 文件格式文档和 h5py 文档,但没有找到任何对我有帮助的内容。我的问题是:
为什么即使我保存相同的数据,文件也会发生变化?
如何阻止它更改,以便版本控制仅在实际数字内容发生更改时看到文件的新版本?
Thanks
HDF5 文件同时使用抽象数据模型和抽象存储模型。这意味着文件在磁盘上的存储方式可能(通常)与它在程序中的表示方式完全不同。可以用多种方式存储完全相同的数据,并且这对于您的程序来说并不明显。
The HDF5文件格式存储规范 http://www.hdfgroup.org/HDF5/doc/H5.format.html#V2ObjectHeaderPrefix允许数据对象标头中存在多个时间戳。这些不存储为属性,因此通常无法由高级 API 访问。
可以使用低级 HDF5 API 关闭写入这些时间戳,但尚不清楚 h5py 中是否有相关功能。这个github问题 https://github.com/h5py/h5py/issues/225看起来正是你想要的,但不幸的是它仍然开放。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)