[英]Error opening file in H5PY (File signature not found)
我一直在使用以下代碼打開一些 HDF5 文件,這些文件在 MATLAB 中使用 H5PY 在 python 中生成:
import h5py as h5
data='dataset.mat'
f=h5.File(data, 'r')
但是我收到以下錯誤:
OSError: Unable to open file (File signature not found)
我檢查了我要打開的文件是 7.3 版的 MAT 文件,並且是 HDF5 格式。 事實上,我之前已經使用 H5PY 成功打開過相同的文件。 我已經確認這些文件存在並且可以訪問,所以我不確定錯誤來自哪里。 任何建議將不勝感激,在此先感謝:)
通常消息File signature not found
表明:
1.您的文件已損壞。
……我覺得最有可能。 你說你以前打開過這些文件。 也許您忘記關閉可能損壞文件的文件句柄。 嘗試使用 HDF5 實用程序h5debug
檢查文件(如果您在操作系統上安裝了 hdf5 lib,則可以在命令行上使用,在 Linux 上使用dpkg -s libhdf5-dev
檢查)。
2. 文件不是 HDF5 格式。
這是您的錯誤消息的已知原因。 但是既然你說你確定了,就是這種情況並且你以前打開過文件,我提供這個僅供參考,供其他可能在這里絆倒的人參考:
自 2015 年 12 月(從 7.3 版開始),Matlab 文件在其MAT 文件級別 5 容器中使用基於 HDF5 的格式(更多文檔)。 scipy
庫支持早期版本的 MAT 文件(v4(1.0 級)、v6 和 v7 到 7.2)並可使用scipy
庫讀取:
import scipy.io
f = scipy.io.loadmat('dataset.mat')
否則您可以嘗試其他方法並查看錯誤是否仍然存在:
PyTables是h5py的替代品,可在此處找到。
import tables
file = tables.open_file('test.mat')
安裝使用
pip install tables
如果您安裝了 matlab, Python MATLAB 引擎是讀取 MAT 文件的替代方法。 文檔位於此處: MATLAB Engine API for Python 。
import matlab.engine
mat = matlab.engine.start_matlab()
f = mat.load("dataset.mat", nargout=1)
我的 .h5 文件也面臨同樣的問題。 問題是我沒有正確下載 .h5 文件。
我正在做 filename.h5->right_click->save link as,它沒有正確下載文件(或者可能是文件被損壞了)。 我沒有這樣做,而是將文件下載為:選擇帶有 filename.h5 的復選框,然后單擊下載,然后我的代碼就可以工作了。
可能這有助於那些犯同樣錯誤的人。
通常這發生在文件損壞時。 我遇到了這個問題並再次下載了文件,它解決了問題。
如果有人在 Jupyter 中遇到此問題,您只需單擊文件的復選框,然后單擊下載按鈕。
我從 這里得到的這個解決方案幫助了我,希望它會幫助你們。
使用tar -czvf zipfilename.tar.gz weightsfile
壓縮文件對我tar -czvf zipfilename.tar.gz weightsfile
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.