如何在不覆盖的情况下编写hdf5文件?

ilc*_*avo 6 python h5py

对不起,如果这是一个非常基本的问题h5py.

我正在阅读文档,但我没有找到类似的例子.

我正在尝试使用Python创建多个hdf5数据集,但事实证明,关闭文件数据后会被覆盖.

假设我做了以下事情:

import numpy as np
import h5py
f = h5py.File('test.hdf5', 'w')
f.create_dataset('data1', data = np.ones(10))
f.close()
f = h5py.File('test.hdf5', 'w')
f.create_dataset('data0', data = np.zeros(10))
f.close()
f = h5py.File('test.hdf5', 'r')
f["data1"].value
f.close()
Run Code Online (Sandbox Code Playgroud)

我明白了

KeyError:"无法打开对象(对象'data1'不存在)"

如果我追加数据,则需要先在'w'模式下打开,然后在'a'模式下追加,有两个不同的语句.

import numpy as np
import h5py
f = h5py.File('test.hdf5', 'w')
f.create_dataset('data1', data = np.ones(10))
f.close()
f = h5py.File('test.hdf5', 'a')
f.create_dataset('data0', data = np.zeros(10))
f.close()
f = h5py.File('test.hdf5', 'r')
f["data1"].value
f.close()
Run Code Online (Sandbox Code Playgroud)

如果我'a'在两种情况下都以模式打开文件:

import numpy as np
import h5py
f = h5py.File('test.hdf5', 'a')
f.create_dataset('data1', data = np.ones(10))
f.close()
f = h5py.File('test.hdf5', 'a')
f.create_dataset('data0', data = np.zeros(10))
f.close()
f = h5py.File('test.hdf5', 'r')
print(f['data1'].value)
f.close()
Run Code Online (Sandbox Code Playgroud)

RuntimeError:无法创建链接(名称已存在)

根据文档,数据应该连续存储,但我没有找到如何避免覆盖数据.

如何仅使用一个语句将数据存储在先前关闭的hdf5上?

Ana*_*mar 2

如果您想在每次运行中创建一个唯一的文件,那么您应该考虑这样命名该文件,一个示例是将时间戳添加到文件名中,一个非常简单的示例是使用模块datetimenow方法strftime来创建文件名。例子 -

import datetime
filename = "test_{}.hdf5".format(datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S"))
Run Code Online (Sandbox Code Playgroud)

然后您可以使用该文件名来打开该文件。


演示 -

>>> import datetime
>>> filename = "test_{}.hdf5".format(datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S"))
>>> filename
'test_2015_08_09_13_33_43.hdf5'
Run Code Online (Sandbox Code Playgroud)