2016-06-29 15 views
9

मैं कुछ HDF5 फ़ाइलें, MATLAB में उत्पादित खोलने के लिए कोड की निम्न बिट का उपयोग किया गया, अजगर में उपयोग कर H5PY है:H5PY में फ़ाइल खोलने (फ़ाइल हस्ताक्षर नहीं मिला) त्रुटि

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

हालांकि मैं

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

मैं देख लिया है कि फ़ाइलों कि मैं खोलने के लिए कोशिश कर रहा हूँ संस्करण 7.3 मेट-फ़ाइलें हैं और HDF5 प्रारूप हैं: निम्न त्रुटि हो रही है। असल में मैंने पहले ही फाइलों को सफलतापूर्वक खोलने के लिए H5PY का उपयोग किया है। मैंने पुष्टि की है कि फाइल मौजूद हैं और पहुंच योग्य हैं इसलिए मुझे सच में यकीन नहीं है कि त्रुटि कहां से आ रही है। किसी भी सलाह बहुत पहले से की सराहना किया जाएगा, धन्यवाद:)

उत्तर

1

आमतौर पर संदेश File signature not found या तो इंगित करता है:

1. आपकी फ़ाइल दूषित है।

... जो मुझे लगता है वह सबसे अधिक संभावना है। आपने कहा कि आपने पहले फाइलें खोली हैं। हो सकता है कि आप अपनी फ़ाइल-हैंडल को बंद करना भूल गए जो फ़ाइल को दूषित कर सकता है। एचडीएफ 5 उपयोगिता h5debug के साथ फ़ाइल की जांच करने का प्रयास करें (यदि आपने अपने ओएस पर hdf5 lib स्थापित किया है तो कमांड लाइन पर उपलब्ध है, लिनक्स पर dpkg -s libhdf5-dev के साथ जांचें)।

2. फ़ाइल एचडीएफ 5 प्रारूप में नहीं है।

यह आपके त्रुटि संदेश के लिए एक ज्ञात कारण है। लेकिन चूंकि आपने कहा है कि आपने सुनिश्चित किया है कि यह मामला है और आपने पहले फाइलें खोली हैं, मैं इसे सिर्फ उन लोगों के संदर्भ में दे रहा हूं जो यहां ठोकर खा सकते हैं:

दिसंबर 2015 से (संस्करण 7.3 के अनुसार) , मैटलैब फाइलें एचडीएफ 5 आधारित प्रारूप का उपयोग अपने MAT-File Level 5 Containers (अधिक doc) में करती हैं। इससे पहले संस्करण मेट-फ़ाइलें (v4 (स्तर 1.0), v6 और 7.2 के लिए v7) द्वारा समर्थित हैं और scipy पुस्तकालय के साथ पढ़ा जा सकता है:

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

नहीं तो आप अन्य तरीकों कोशिश करते हैं और दिखाई दे या नहीं त्रुटि बनी हुई है:

पायटेबल्स h5py का विकल्प है और here पाया जा सकता है।

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

अजगर MATLAB इंजन यदि आप matlab स्थापित किया है, मेट फ़ाइलों को पढ़ने के लिए एक विकल्प है। दस्तावेज़ीकरण यहां पाया गया है: MATLAB Engine API for Python

import matlab.engine 
mat = matlab.engine.start_matlab() 
f = mat.load("dataset.mat", nargout=1) 
संबंधित मुद्दे