最近,我已经开始使用.hdf5文件,但仍然无法找到正确使用外部链接的方法。
我有一些.hdf5文件。每个文件具有相同的结构,例如相同的键和数据类型。我想将它们合并到一个文件中,但是对每个文件使用不同的键将它们分开。
我要做的是:
myfile = h5py.File("/path_to_the_directory/merged_images.hdf5", 'w')
myfile['0.000'] = h5py.ExternalLink("img_000.hdf5", "/path_to_the_directory/images")
myfile['0.001'] = h5py.ExternalLink("img_001.hdf5", "/path_to_the_directory/images")
myfile.flush()然后我试着用:
myfile = h5py.File("/path_to_the_directory/merged_images.hdf5", 'r')
keys = list(myfile.keys())
print(keys)
print(list(myfile[keys[0]]))这句话print(keys)给了我['0.000', '0.001']。所以我相信文件的结构没问题。
下面的行给了我一个例外:KeyError: "Unable to open object (unable to open external file, external link file name = 'img_000.hdf5')"
我做错了什么吗?文档非常糟糕,而且我还没有找到相关的用例。
发布于 2019-03-06 14:45:04
问题是你混淆了道路。区分两种路径是很重要的:
正如在h5py.ExternalLink中提到的,文献资料的语法是:
myfile['/path/of/link'] = h5py.ExternalLink('/path/to/file.hdf5', '/path/to/dataset')因此,我想鼓励您使用相对文件路径作为
ExternalLink。如果您这样做,那么一切将继续工作,即使您将文件集合到一个新的位置在您的硬盘驱动器(或给予其他人)。
有了正确的路径,您的示例就可以工作了,如下所示。
请注意,为了说明我关于相对文件路径的注释,我已经将数据集的所有路径设置为绝对路径(这些路径仅是文件的内部路径,并且不依赖于文件存储在硬盘驱动器上的位置),同时保留了文件路径相对。
import h5py
import numpy as np
myfile = h5py.File('test_a.hdf5', 'w')
myfile['/path/to/data'] = np.array([0,1,2])
myfile.close()
myfile = h5py.File('test_b.hdf5', 'w')
myfile['/path/to/data'] = np.array([3,4,5])
myfile.close()
myfile = h5py.File('test.hdf5', 'w')
myfile['/a'] = h5py.ExternalLink('test_a.hdf5', '/path/to/data')
myfile['/b'] = h5py.ExternalLink('test_b.hdf5', '/path/to/data')
myfile.close()
myfile = h5py.File('test.hdf5', 'r')
keys = list(myfile.keys())
print(keys)
print(list(myfile[keys[0]]))
print(list(myfile[keys[1]]))
myfile.close()印刷品(如预期):
['a', 'b']
[0, 1, 2]
[3, 4, 5]https://stackoverflow.com/questions/55018875
复制相似问题