[英]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')"
難道我做錯了什么? 文檔非常差,我在那里還沒有找到相關的用例。
問題在於您正在混淆路徑。 區分兩種類型的路徑很重要:
如文檔中所述 , 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.