h5py:“ OSError:无法读取/写入数据转换路径没有适当的功能”

问题描述

我正在尝试使用h5py库将原始二进制格式的文件(例如另一种格式的图像或音频文件)嵌入到新的HDF5数据库中。这发生在store函数中,该函数添加一个标量(0 维数据集添加到HDF5文件中,然后尝试将原始二进制数据写入其中。由于我想为数据类型设置自定义标签,因此我不得不使用h5py的低级API中的某些功能

def store(path: pathlib.Path,group: h5py.Group,title: str):
    type = h5py.h5t.create(h5py.h5t.OPAQUE,path.stat().st_size)
    type.set_tag(b"Content Type: " + MIMES[path.suffix[1:]]) # Store MIME type as datatype tag
    dataid = h5py.h5d.create(group.id,title.encode(),type,h5py.h5s.create(h5py.h5s.SCALAR))
    h5py.Dataset(dataid)[()] = np.fromfile(path,dtype=type.dtype)[0]

但是,这似乎每次都引起相同的问题(编辑回溯以隐藏个人信息):

Traceback (most recent call last):
  ...
  File "embed.py",line XX,in store
    h5py.Dataset(dataid)[()] = np.fromfile(path,dtype=type.dtype)[0]
  File "h5py\_objects.pyx",line 54,in h5py._objects.with_phil.wrapper
  File "h5py\_objects.pyx",line 55,in h5py._objects.with_phil.wrapper
  File "C:\Users\user\...\venv\lib\site-packages\h5py\_hl\dataset.py",line 708,in __setitem__
    self.id.write(mspace,fspace,val,mtype,dxpl=self._dxpl)
  File "h5py\_objects.pyx",in h5py._objects.with_phil.wrapper
  File "h5py\h5d.pyx",line 222,in h5py.h5d.DatasetID.write
  File "h5py\_proxy.pyx",line 132,in h5py._proxy.dset_rw
  File "h5py\_proxy.pyx",line 93,in h5py._proxy.H5PY_H5Dwrite
OSError: Can't write data (no appropriate function for conversion path)

我已经尝试了所有我能想到的一切,例如用dataid.write(...)调用替换NumPy切片语法,分配ndarray本身而不是其第一个(也是唯一一个)元素,甚至更改数据集0维标量到1维“简单”空间。

在这一点上,我确信问题是不透明的数据类型:导致错误的特定方面是尝试访问Dataset对象中的数据,该对象是我在编写一些{{1}之后发现的}语句用于调试目的。这是h5py本身的问题,还是我以错误的方式处理此问题?

我使用过的一些相关资源可能会有所帮助:

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)