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

2024-05-29 11:40:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有相当大的数据集。存储在hdf5格式文件中的所有信息。我找到了python的h5py library。所有工作正常,除了

[<HDF5 object reference>]

我不知道如何把它转换成更可读的东西。我能做吗?因为这个问题的文档对我来说有点难。 也许除了Python之外,还有其他一些不同语言的解决方案。我非常感谢你的帮助。

理想情况下应该是链接到文件。

这是我代码的一部分:

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。如果有可能的话。


Tags: 数据path文档testimport信息objectlibrary
3条回答

解决方案

HDF5派生类并覆盖__repr__方法。

解释

当您打印解释器提供给您的对象时,默认情况下会调用该对象上的函数__repr__,该函数返回实例的类名和内存位置。

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>]

现在,您可以通过重写此类的__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 )

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

您可以为此类定义自己的^{}^{}方法,或者创建一个简单的包装器,该包装器使用您希望看到的信息格式化字符串。在快速浏览文档的基础上,您可以执行以下操作

from h5py import File

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

相关问题 更多 >

    热门问题