将在HDF5组下保存的数据恢复为Carray

时间:2017-07-05 14:00:47

标签: python-2.7 hdf5

我是HDF5文件格式的新手,我有一个以HDF5格式保存的数据(图像)。这些图像保存在一个名为“data”的组中,该组位于根组之下作为Carrays。我想要做的是回顾一片保存的图像。例如前400或类似的东西。以下是我的所作所为。

 h5f = h5py.File('images.h5f', 'r')
 image_grp= h5f['/data/']  #the image group (data) is opened
 print(image_grp[0:400])

但是我收到以下错误

Traceback (most recent call last):
File "fgf.py", line 32, in <module>
print(image_grp[0:40])
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
    (/feedstock_root/build_artefacts/h5py_1496410723014/work/h5py-2.7.0/h5py/_objects.c:2846)
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
    (/feedstock_root/build_artefacts/h5py_1496410723014/work/h5py
    2.7.0/h5py/_objects.c:2804)
File "/..../python2.7/site-packages/h5py/_hl/group.py", line 169, in
    __getitem__oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
File "/..../python2.7/site-packages/h5py/_hl/base.py", line 133, in _e name = name.encode('ascii')
AttributeError: 'slice' object has no attribute 'encode'

我不知道为什么我会收到此错误,但我甚至不确定是否可以将保存为单个数据集的图像切片。

2 个答案:

答案 0 :(得分:0)

我知道这是一个古老的问题,但这是搜索'slice' object has no attribute 'encode'时的第一击,它没有解决方案。

发生错误是因为“组”是不具有group属性的encoding。您正在寻找dataset元素。

您需要查找/知道包含dataset的项目的密钥。

一种建议是列出组中的所有键,然后猜测它是哪一个:

print(list(image_grp.keys()))

这将为您提供组中的密钥。 一个常见的情况是第一个元素是图像,因此您可以执行以下操作:

image_grp= h5f['/data/']
image= image_grp(image_grp.keys[0])
print(image[0:400])

答案 1 :(得分:0)

昨天我遇到了类似的错误,写了一小段代码来获取我想要的 h5py 文件切片。

import h5py

def h5py_slice(h5py_file, begin_index, end_index):
    slice_list = []
    with h5py.File(h5py_file, 'r') as f:
        for i in range(begin_index, end_index):
            slice_list.append(f[str(i)][...])
    return slice_list

它可以像

一样使用
the_desired_slice_list = h5py_slice('images.h5f', 0, 400)