h5py是否提供了一种简洁的创建或使用组或数据集的简单方法?

我正在使用h5py修复python脚本.它包含这样的代码:

hdf = h5py.File(hdf5_filename, 'a')
... 
g = hdf.create_group('foo')
g.create_dataset('bar', ...whatever...)

有时这会在一个已经有一个名为’foo’的组的文件上运行,在这种情况下我看到“ValueError:无法创建组(名称已存在)”

解决这个问题的一种方法是用create_group替换一行简单的行,如下所示:

if 'foo' in hdf.keys():
    g = hdf['foo']
else:
    g = hdf.create_group['foo']

g.create_dataset(...etc...)

有没有更简洁的方法来做到这一点,也许只有一行?与标准C库中的文件一样,“a”模式将附加到现有文件,或者创建文件(如果文件尚未存在).

数据集也是如此 – 我有

create_dataset('bar', ...) 

但应该先检查一下:

if 'bar' in g.keys():
   d = g['bar']
else:
   d = g.create_dataset('bar')

我的愿望:找到h5py的方法名为create_or_use_group()和create_or_use_dataset().究竟存在什么?

最佳答案
是:require_grouprequire_dataset

with h5py.File("/tmp/so_hdf5/test2.h5", 'w') as f:
    a = f.create_dataset('a',data=np.random.random((10, 10)))

with h5py.File("/tmp/so_hdf5/test2.h5", 'r+') as f:
    a = f.require_dataset('a', shape=(10, 10), dtype='float64')
    d = f.require_dataset('d', shape=(20, 20), dtype='float64')
    g = f.require_group('foo')
    print(a)
    print(d)
    print(g)

请注意,您确实需要知道数据集的形状和类型,否则require_dataset会抛出TypeError.在这种情况下,您可以执行以下操作:

try:
    a = f.require_dataset('a', shape=(10, 10), dtype='float64')
except TypeError:
    a = f['a']

如果你还不知道shape和dtype,我认为require_dataset比使用try更有优势……除了……

转载注明原文:h5py是否提供了一种简洁的创建或使用组或数据集的简单方法? - 代码日志