首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用python + h5py访问外部链接

无法使用python + h5py访问外部链接
EN

Stack Overflow用户
提问于 2019-03-06 08:46:45
回答 1查看 1.6K关注 0票数 2

最近,我已经开始使用.hdf5文件,但仍然无法找到正确使用外部链接的方法。

我有一些.hdf5文件。每个文件具有相同的结构,例如相同的键和数据类型。我想将它们合并到一个文件中,但是对每个文件使用不同的键将它们分开。

我要做的是:

代码语言:javascript
复制
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()

然后我试着用:

代码语言:javascript
复制
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')"

我做错了什么吗?文档非常糟糕,而且我还没有找到相关的用例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 14:45:04

问题是你混淆了道路。区分两种路径是很重要的:

  • 文件路径(硬盘驱动器上的位置)。
  • 数据集路径:此路径是HDF5 5-文件的内部路径,不取决于您存储文件的位置。

正如在h5py.ExternalLink中提到的,文献资料的语法是:

代码语言:javascript
复制
myfile['/path/of/link'] = h5py.ExternalLink('/path/to/file.hdf5', '/path/to/dataset')

因此,我想鼓励您使用相对文件路径作为ExternalLink。如果您这样做,那么一切将继续工作,即使您将文件集合到一个新的位置在您的硬盘驱动器(或给予其他人)。

有了正确的路径,您的示例就可以工作了,如下所示。

请注意,为了说明我关于相对文件路径的注释,我已经将数据集的所有路径设置为绝对路径(这些路径仅是文件的内部路径,并且不依赖于文件存储在硬盘驱动器上的位置),同时保留了文件路径相对

代码语言:javascript
复制
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()

印刷品(如预期):

代码语言:javascript
复制
['a', 'b']
[0, 1, 2]
[3, 4, 5]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55018875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档