2015-06-24 26 views
7

में h5py का उपयोग कर python2.7 में चाबियाँ, मैं विश्लेषण कर सकते हैं एक hdf5 फ़ाइलों कुंजीकी खोज python3

$ python 
>>> import h5py 
>>> f = h5py.File('example.h5', 'r') 
>>> f.keys() 
[u'some_key'] 

का उपयोग हालांकि, python3.4 में, मैं कुछ अलग मिलता है:

$ python3 -q 
>>> import h5py 
>>> f = h5py.File('example.h5', 'r') 
>>> f.keys() 
KeysViewWithLock(<HDF5 file "example.h5" (mode r)>) 

KeysViewWithLock क्या है, और कैसे क्या मैं पाइथन 3 में अपनी एचडीएफ 5 कुंजी की जांच कर सकता हूं?

उत्तर

20

h5py की वेबसाइट (http://docs.h5py.org/en/latest/high/group.html#dict-interface-and-links) से:

अजगर 3 से h5py उपयोग करते समय, कुंजी(), मूल्यों() और आइटम() तरीकों सूचियों के बजाय दृश्य की तरह वस्तुओं वापस आ जाएगी। ये ऑब्जेक्ट्स कंटेनरशिप परीक्षण और पुनरावृत्ति का समर्थन करते हैं, लेकिन सूचियों जैसे कटाई नहीं की जा सकती हैं।

यह बताता है कि हम उन्हें क्यों नहीं देख सकते हैं। सरल जवाब उन्हें एक सूची में बदलने के लिए है:

>>> list(for.keys()) 

दुर्भाग्य से, मैं IPython में चीजों को चलाने के लिए, और यह आदेश 'l' का उपयोग करता है। इसका मतलब है कि दृष्टिकोण काम नहीं करेगा।

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

>>> [key for key in f.keys()] 
['mins', 'rects_x', 'rects_y'] 

मैं एक साधारण समारोह है कि यह स्वचालित रूप से करता है बना लिया है: फिर

def keys(f): 
    return [key for key in f.keys()] 

आपको मिलेगा:

>>> keys(f) 
['mins', 'rects_x', 'rects_y'] 
+0

बस पाया: 'सूची (f.keys()) '। – user14717

+0

आह, मैं अपना जवाब अपडेट करना भूल गया। – Joel