Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何转换此类型的数据<;hdf5对象参考>;在python中更具可读性?_Python_Python 2.7_Hdf5_H5py - Fatal编程技术网

如何转换此类型的数据<;hdf5对象参考>;在python中更具可读性?

如何转换此类型的数据<;hdf5对象参考>;在python中更具可读性?,python,python-2.7,hdf5,h5py,Python,Python 2.7,Hdf5,H5py,我有相当大的数据集。hdf5格式文件中存储的所有信息。我为python找到了一个。除以下部件外,所有部件均正常工作: [<HDF5 object reference>] st输出为[] 测试输出为 我期望的是类似这样的东西:/home/directory/file1.jpg。当然,如果可能的话。您可以为此类定义自己的或方法,或者创建一个简单的包装器,用希望看到的信息格式化字符串。基于对文档的快速浏览,您可以执行以下操作 from h5py import File class My

我有相当大的数据集。hdf5格式文件中存储的所有信息。我为python找到了一个。除以下部件外,所有部件均正常工作:

[<HDF5 object reference>]
st
输出为
[]

测试
输出为

我期望的是类似这样的东西:
/home/directory/file1.jpg
。当然,如果可能的话。

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

from h5py import File

class MyHDF5File (File):
    def __repr__ (self):
        return '<HDF5File({0})>'.format(self.filename)
来自h5py导入文件的

类myhdf5文件(文件):
定义报告(自我):
返回“”。格式(self.filename)
解决方案 从
HDF5
派生一个类,并覆盖
方法

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

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

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

>>> <__main__.Person object at 0x00000000022CE940>
现在,您可以通过对此类的
\uuuu repr\uuu
函数进行覆盖来更改对象的打印方式

注意:您也可以覆盖
\uuuu str\uuuu
,有关详细信息,请参阅


我的朋友回答了我的问题,我明白这是多么容易。但我花了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 )

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

我的问题不仅仅是关于格式,而是关于更重要的数据表示。也许我在帖子中没有说对,但不幸的是,这些答案并不是我真正的问题。你能解释一下,这是什么意思吗?@Dims如果我理解正确,我们遇到的麻烦是我们有一个
,换句话说,一个引用,而不是对象本身。“对象”本身就是我们的字符串。(这就是答案中代码中的
st
)。因此,由于此引用引用的是我们读取的文件上的对象(
f
),因此我们执行
f[st]
,它返回实际对象(
obj
)。然后,要将这个HDF5对象转换为字符串,我们必须对它进行迭代,取每个整数
i
,将其转换为一个字符(通过执行
chr(i)
)并将其连接在一起以获得字符串。这个问题和答案类似:@RyanQuey这些问题是同级的,正确但不相同(即重复)。@Dmytrochasovsky,我同意。我不是想说它们是重复的,只是想给那些试图解决另一个问题的人贴上相似的标签
print([p])
>>> [<__main__.Person object at 0x000000000236E940>]
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
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 )