如何将这种类型的数据 <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 )
如果没有准确说明我的问题,我很抱歉。但这是我试图找到的解决方案。
我有相当大的数据集。所有信息存储在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 )
如果没有准确说明我的问题,我很抱歉。但这是我试图找到的解决方案。