如何将这种类型的数据 <hdf5 object reference> 转换为 python 中更易读的内容?

How convert this type of data <hdf5 object reference> to something more readable in the python?

我有相当大的数据集。所有信息存储在hdf5格式文件中。我发现 h5py library 对应 python。除了

[<HDF5 object reference>]

我不知道如何将其转换为更具可读性的内容。我能做到吗?因为这个问题中的文档对我来说有点难。 也许不仅 Python 还有其他一些使用不同语言的解决方案。我很感激我得到的每一个帮助。

理想情况下应该link到文件。

这是我的代码的一部分:

import numpy as np
import h5py 
import time

f = h5py.File('myfile1.mat','r') 
#print f.keys()
test = f['db/path']
st = test[3]
print(  st )

st 输出为 [<HDF5 object reference>]

test 输出为 <HDF5 dataset "path": shape (73583, 1), type "|O8">

我希望 [<HDF5 object reference>] 是这样的:/home/directory/file1.jpg。当然可以的话

您可以为此 class 定义您自己的 __str__() or __repr__() 方法,或者创建一个简单的包装器,用您想要查看的信息格式化一个字符串。基于对文档的快速浏览,您可以执行类似

from h5py import File

class MyHDF5File (File):
    def __repr__ (self):
        return '<HDF5File({0})>'.format(self.filename)

解决方案

HDF5 派生 class 并覆盖 __repr__ 方法。

说明

当你打印一个对象时,解释器会给你调用该对象上的函数__repr__,默认情况下returns class 名称和实例的内存位置。

class Person: 
    def __init__(self, name):
        self.name = name

p = Person("Jhon Doe")
print(p)

>>> <__main__.Person object at 0x00000000022CE940>

在您的例子中,您有一个列表,其中只有一个 HDF5 对象实例。等价于:

print([p])
>>> [<__main__.Person object at 0x000000000236E940>]

现在,您可以通过重写 class 的 __repr__ 函数来更改对象的打印方式。

注意:您也可以覆盖 __str__,有关详细信息,请参阅 Difference between str and repr in Python

class MyReadablePerson(Person):
    def __init__(self, name):
        super(MyReadablePerson, self).__init__(name)
    def __repr__(self):
        return "A person whose name is: {0}".format(self.name)

p1 = MyReadablePerson("Jhon Doe")
print(p1)

>>> A person whos name is: Jhon Doe

我的朋友回答了我的问题,我明白了这有多简单。但是我花了4个多小时来解决我的小问题。解决方案是:

import numpy as np
import h5py 
import time

f = h5py.File('myfile1.mat','r') 
test = f['db/path']
st = test[0][0]
obj = f[st]
str1 = ''.join(chr(i) for i in obj[:])
print( str1 )

如果没有准确说明我的问题,我很抱歉。但这是我试图找到的解决方案。