【问题标题】:Can't access external link with python + h5py无法使用 python + h5py 访问外部链接
【发布时间】:2019-07-27 20:51:10
【问题描述】:

最近我开始使用.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')"

我做错了吗?文档很差,我没有 t 在那里找到了相关的用例。

【问题讨论】:

  • 您的问题解决了吗?

标签: python python-3.x hdf5 h5py hdf


【解决方案1】:

问题是您混淆了路径。区分两种类型的路径很重要:

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

h5py.ExternalLink 的语法,如the documentation 所述,是:

myfile['/path/of/link'] = h5py.ExternalLink('/path/to/file.hdf5', '/path/to/dataset')

因此,我想鼓励您将relative file path 用于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]

【讨论】:

    猜你喜欢
    • 2020-10-27
    • 2015-10-13
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2019-07-01
    • 2013-06-02
    相关资源
    最近更新 更多