ValueError: Unable to create group (name already exists) in h5py

ValueError: Unable to create group (name already exists) in h5py

我正在尝试以 h5py 格式保存一些数据。我想重写现有文件。下面是一个示例代码。

import h5py
hf = h5py.File('fileName.h5py', 'w')
grp = hf.create_group('grp_1')
data = np.random.randn(100)
dataset = grp.create_dataset(file, data=data)

问题:如果已经有一个 fileName.h5py 文件,它会抱怨:

'OSError: Unable to create the file (unable to truncate a file which is >already open)'.

如果已经有一个组'grp_1',它会报错:

'ValueError: Unable to create group (name already exists) in h5py'.

但是根据文档,应该不会出现这些错误还是??

如有任何帮助,我们将不胜感激。我使用的是 2.10.0 版本的 h5py 和 python 3.8.8.

您有 2 个错误。
第一个错误:OSError: Unable to create file (unable to truncate a file which is already open)
当另一个进程以写入模式 ('w') 打开文件时,您尝试打开时会发生此错误。只有 1 个进程可以打开 HDF5 文件进行写访问。在上面的代码段中,您没有 hf.close()。因此它仍然是开放的。当你有 exception/error when 运行 并且没有进入关闭语句就退出时也会打开文件(所以不要正确关闭文件)。

要避免这种情况,请使用 Python 的上下文管理器。当你退出 with/as 代码块时(即使有异常)它会自动关闭文件,如下所示:

import h5py
with h5py.File('fileName.h5py', 'w') as hf:
    grp = hf.create_group('grp_1')
    data = np.random.randn(100)
    dataset = grp.create_dataset(file, data=data)

第二个错误:ValueError: Unable to create group (name already exists) 当已经有一个组时 'grp_1'。这是预期的行为。它避免无意中覆盖现有组(并丢失现有数据)。

解决方案:create_group() 有一个备用函数,您可以在不知道它是否存在时使用它。它是:require_group()。如果该组不存在,它将创建它。如果存在,它将 return 组对象。 create_dataset()require_dataset() 有一对相似的组合。