如何在Python中多次编写和附加到h5文件?

问题描述 投票:0回答:1

我试图通过以下方式将数据集写入h5文件:

fpath = 'path-to-/data.h5'
with h5py.File(fpath,'w') as hf:
    hf.create_dataset('a', data=a)

然后我在同一代码中追加到包含更多数据的文件:

with h5py.File(fpath,'a') as hf:
    dset = hf.create_dataset('b',(nrow,1),maxshape=(nrow,None),chunks=(nrow,1))
    for i in range(ncol):
        dset[:,-1:] = b
        if i+1 < ncol:
            dset.resize(dset.shape[1]+1,axis=1)

我对第二个操作(追加)得到以下错误:

OSError: Unable to create file (unable to open file: name = 'path-to-/data.h5', 
    errno = 2, error message = 'Aucun fichier ou dossier de ce type',
    flags = 13, o_flags = 242)

当我检查目录时,文件path-to-/data.h5存在但没有附加数据集(使用list(hf.keys())检查)。

为了完成所有这些工作,目前我正在一步编写所有内容而不使用with语句(如EDIT here问题中所述)。

hf = h5py.File(fpath,'w')
hf.create_dataset('a', data=a)
dset = hf.create_dataset('b',(nrow,1),maxshape=(nrow,None),chunks=(nrow,1))
for i in range(ncol):
    dset[:,-1:] = b
    if i+1 < ncol:
        dset.resize(dset.shape[1]+1,axis=1)
hf.close()

在这里,如果我删除了写入的文件并再次运行代码,它会产生与上面相同的错误,它只会在我对文件名进行更改时运行(例如'data_1.h5')。我不理解这一部分,因为我预计操作h5py.File(fpath,'w')将独立于文件的存在或不存在。

总而言之,我发现使代码工作的唯一方法是使用第二种方法(不附加写入)并且不改变生成的文件(重命名或移动)。

我找不到它here,但是有没有办法强制写入并附加到h5文件而不管它是否存在或以前的调用?

python hdf5 h5py
1个回答
1
投票

@ nish-ant,我创建了一个简单的MCVE来演示带有2个简单数据集的'w'和'a'选项。它在1个程序中复制你的过程(据我所知)。首先我用'w'选项打开文件,关闭,然后用'a'选项重新打开。它按预期工作。查看并与您的代码进行比较。也许它可以帮助您识别文件访问错误。 我也成功测试了这些文件选项: 1.'w'代表1;然后'r +'为2 2.'a'为1;那么'a'为2

import h5py
import numpy as np

#Create array_to_be_saved
arr1 = np.arange(18.).reshape(3,6)
arr2 = 2.0*arr1

fpath = 'SO_55936567_data.h5'
with h5py.File(fpath,'w') as h5f:
    h5f.create_dataset('a', data=arr1)

h5f.close()

with h5py.File(fpath,'a') as h5f:
    h5f.create_dataset('b', data=arr2)

h5f.close()

print ('done')
© www.soinside.com 2019 - 2024. All rights reserved.