【问题标题】:HDF5 in python: reading filepython中的HDF5:读取文件
【发布时间】:2020-04-12 10:02:02
【问题描述】:

我之前用过这个没问题,突然不行了:

import scipy.io
import numpy as np
import h5py
f = h5py.File('Dv25.mat','r')
D = f["Dv25"]

输出:

Traceback (most recent call last):

  File "C:/Users/jonathan/Documents/Forskning/P1/Datab/Felles/Matart/Felles/datab.py", line 5, in 
<module>
    D = f["Dv25"]
  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:\Program Files\Python38\lib\site-packages\h5py\_hl\group.py", line 264, in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
  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 "h5py\h5o.pyx", line 190, in h5py.h5o.open
KeyError: "Unable to open object (object 'Dv25' doesn't exist)"

但是,输入 f 会给出:

>>> f
<HDF5 file "Dv25.mat" (mode r)>

将 Dv25.mat 换成 Dv25 或使用 ' 或 " 都没有帮助。

这个问题的原因是什么,我该如何解决?显然这个文件是“那里”

谢谢!!!

最好的,J

【问题讨论】:

  • 我对这个库没有经验,但问题出在 python 中。您正在尝试索引对象“文件”的某些内容,而无法索引对象“文件”。如果您想使用索引,很可能您需要将 f 转换为可以索引的其他对象。
  • 在 google 上搜索了一下,尝试运行f.keys() 看看哪些可以访问,哪些不能访问
  • 所以,我成功复制了之前使用的代码,它对相同类型的文件运行良好。 f.keys 给了 >>> f.keys > 所以我还是觉得我的初始代码应该没问题...

标签: python hdf5 h5py


【解决方案1】:

一些 h5py/HDF5 基础知识:
f 是文件对象。
f['Dv25'] 是对象引用(组或数据集)。在这种情况下,它是根级别 ('/') 上名为 'Dv25' 的节点。显然,您的文件中不存在同名的对象。
使用f.keys() 获取根级别的对象。 这将返回根级别对象的视图;它们可以是组或数据集。您可以迭代它们以获取名称。要打印,请使用此循环:(应标识根级别名称):

for i in f.keys():  
    print (i)

注意:.mat 扩展名通常来自 Matlab,它可以选择写入 HDF5 格式的文件。确保这是以该格式编写的。

【讨论】:

  • 我解决了。原来 f.keys 的输出是错误的,这是我回过头来检查我是如何在 Matlab 中生成文件的。谢谢!
猜你喜欢
  • 2017-11-26
  • 2015-03-26
  • 2015-03-19
  • 2016-04-21
  • 2015-04-18
  • 2017-04-23
  • 2022-07-07
  • 1970-01-01
  • 2013-01-23
相关资源
最近更新 更多