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

时间:2015-09-03 18:39:10

标签: python python-2.7 hdf5 h5py

我是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和用户块问题,我没有正确处理?

1 个答案:

答案 0 :(得分:0)

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