簡體   English   中英

無法使用python + h5py訪問外部鏈接

[英]Can't access external link with python + h5py

最近,我已經開始使用.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')"行給我一個例外: KeyError: "Unable to open object (unable to open external file, external link file name = 'img_000.hdf5')"

難道我做錯了什么? 文檔非常差,我在那里還沒有找到相關的用例。

問題在於您正在混淆路徑。 區分兩種類型的路徑很重要:

  • 文件路徑(硬盤驅動器上的位置)。
  • 數據集路徑:此路徑在HDF5文件的內部,與存儲文件的位置無關。

文檔所述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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM