2016-06-29 16 views
9

Tôi đã sử dụng các bit mã sau đây để mở một số tập HDF5, được sản xuất trong MATLAB, trong python sử dụng H5PY:Lỗi mở tập tin trong H5PY (không tìm thấy tập tin chữ ký)

import h5py as h5 
data='dataset.mat' 
f=h5.File(data, 'r') 

Tuy nhiên tôi nhận được lỗi sau:

OSError: Unable to open file (File signature not found) 

Tôi đã kiểm tra xem các tệp mà tôi đang cố gắng mở có phiên bản 7.3 tệp MAT và định dạng HDF5 không. Trong thực tế, tôi đã sử dụng H5PY để mở các tệp tương tự thành công trước đây. Tôi đã xác nhận rằng các tập tin tồn tại và có thể truy cập vì vậy tôi không thực sự chắc chắn nơi mà các lỗi đến từ. Lời khuyên nào sẽ được đánh giá rất nhiều, cảm ơn trước:)

Trả lời

1

Thường thì nhắn File signature not found chỉ ra một trong hai:

1. tập tin của bạn bị hỏng.

... là những gì tôi nghĩ là rất có thể. Bạn nói bạn đã mở các tệp trước đó. Có lẽ bạn quên đóng tập tin xử lý của bạn mà có thể làm hỏng tập tin. Thử kiểm tra tệp bằng tiện ích HDF5 h5debug (có sẵn trên dòng lệnh nếu bạn đã cài đặt lib hdf5 trên hệ điều hành của mình, hãy kiểm tra với dpkg -s libhdf5-dev trên Linux).

2. Tệp không ở định dạng HDF5.

Đây là nguyên nhân đã biết cho thông báo lỗi của bạn. Nhưng kể từ khi bạn nói rằng bạn đã chắc chắn, rằng đây là trường hợp và bạn đã mở các tập tin trước, tôi đưa ra điều này chỉ để tham khảo cho những người khác có thể vấp ngã ở đây:

Kể từ tháng 12 năm 2015 (kể từ phiên bản 7.3) , Các tệp Matlab sử dụng định dạng dựa trên HDF5 trong MAT-File Level 5 Containers của chúng (hơn doc). Đầu phiên bản MAT-file (v4 (Level 1.0), v6 và v7 đến 7.2) được hỗ trợ bởi và có thể được đọc với scipy thư viện:

import scipy.io 
f = scipy.io.loadmat('dataset.mat') 

Nếu không, bạn có thể thử phương pháp khác và xem liệu lỗi vẫn tồn tại:

PyTables là một thay thế cho h5py và được tìm thấy here.

import tables 
file = tables.openFile('test.mat') 

Python MATLAB cơ là một thay thế để đọc file MAT, nếu bạn đã matlab cài đặt. Tài liệu được tìm thấy ở đây: MATLAB Engine API for Python.

import matlab.engine 
mat = matlab.engine.start_matlab() 
f = mat.load("dataset.mat", nargout=1) 
Các vấn đề liên quan