我尝试用以下方式将数据集写入h5文件:
fpath = 'path-to-/data.h5'
with h5py.File(fpath,'w') as hf:
hf.create_dataset('a', data=a)
然后我用相同的代码在文件中附加更多的数据:
^{pr2}$对于第二个操作(append),我得到以下错误:
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
语句(如问题EDIThere)中所建议的那样。在
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')
将独立于文件的存在或不存在。在
总而言之,我发现让代码工作的唯一方法是使用第二种方法(write without append),并且不要更改生成的文件(重命名或移动)。在
我找不到它here,但是有没有一种方法可以强制写入并附加到h5文件,而不管它是否存在或以前的调用?在
@nish ant,我创建了一个简单的MCVE,用2个简单的数据集演示“w”和“a”选项。它在一个程序中复制你的过程(据我所知)。首先我用'w'选项打开文件,关闭,然后用'a'选项重新打开。它按预期工作。检查并与代码进行比较。也许它可以帮助您识别文件访问错误。
我还成功地测试了这些文件选项:
1.'“w”代表1;然后“r+”代表2
2.'a代表1,然后a代表2
相关问题 更多 >
编程相关推荐