当文件有用户块时,h5py 不会覆盖

h5py will not overwrite when file has user block

我是 HDF5 的新手,我正在尝试弄清楚如何打开和覆盖在 python 2.7 中具有用户块并使用 h5py 2.1.3 版的 HDF5 文件。

假设我按以下方式创建文件:

import numpy as np 
import h5py

def newfile(filename):
    '''This is a test function for creating an HDF5 file.'''

    # create dummy data for now
    data = np.zeros(100)

    # create the file and stick data in a dataset in the root group
    with h5py.File(filename, mode="w", userblock_size=512) as f:
        f['dataset'] = data

    # populate the user block with something after file has been closed
    with open(filename, "rb+") as f:
        f.write('This is a test of the user block, just a place to put ' +
                'random data')

当此文件不存在时,此函数会按预期使用数据创建一个新文件并填充用户块。但是,如果我在文件创建后尝试 运行 相同的功能(即 运行 两次而不删除文件)我收到:

IOError: unable to create file (File accessibilty: Unable to open file)

这让我很惊讶。我预计该文件会被覆盖,因为我最初使用应该覆盖的 mode="w" 打开文件。

但是,如果我从原始文件创建中删除用户块创建,文件将按预期成功覆盖。我是不是在创建用户块数据时做错了什么,还是我偶然发现了 HDF5 和我没有正确处理的用户块的问题?

这似乎是旧版 hdf5(版本 1.8.11)和 h5py(版本 2.1.3)交互方式中的错误。解决方案是升级到当前版本,即HDF5 1.8.15和h5py 2.5.0。这有效地解决了python 2.7.5.

中的问题