簡體   English   中英

在 H5PY 中打開文件時出錯(未找到文件簽名)

[英]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')

否則您可以嘗試其他方法並查看錯誤是否仍然存在:

PyTablesh5py的替代品,可在此處找到。

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.

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