我正尝试通过以下方式将数据集写入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文件,而不管它是否存在或以前的调用是什么?
答案 0 :(得分: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')