2017-04-12 189 views
1

如何查看給定.h5文件在Python中具有哪些變量,數據集等?如何在Python中檢查.h5文件

我可以讀通過運行這個

import h5py 
f = h5py.File(filename, 'r') 

我怎麼能現在看到我.h5文件中有哪些變量文件?

運行f.keys()輸出無信息

KeysView(<HDF5 file filename (mode r)>) 

在Matlab中我只需撥打h5disp(文件名),但想知道如何做到這一點在Python

+1

你使用python3嗎? –

+0

yes ............ – gota

+2

然後@Astrom建議的解決方案應該有幫助 –

回答

3

你試試?

print(list(f.keys())) 

這應該給你所有的組在你的hdf5文件。如果f是一個組,則可以對數據集執行相同操作。

+1

這是必需的,因爲在Python3中f.keys()返回和迭代器,應該明確展開到列表中。 –

+0

它輸出'['#refs#','var1','var2','var3','var4']'#refs#是什麼意思? – gota

+1

我會建議看裏面'#ref#'看看裏面是什麼。據我們可以判斷它是一個在你的hdf5文件中的組,但沒有提供更多關於它是如何創建的信息(你可能沒有),這很難說清楚。 – Astrom

1

或許矯枉過正,但我​​有這個,可能有人有用:

from __future__ import print_function 

def scan_hdf5(path, recursive=True, tab_step=2): 
    def scan_node(g, tabs=0): 
     print(' ' * tabs, g.name) 
     for k, v in g.items(): 
      if isinstance(v, h5.Dataset): 
       print(' ' * tabs + ' ' * tab_step + ' -', v.name) 
      elif isinstance(v, h5.Group) and recursive: 
       scan_node(v, tabs=tabs + tab_step) 
    with h5.File(path, 'r') as f: 
     scan_node(f) 

而簡單的輸入:

>>> scan_hdf5('/tmp/dummy.h5') 
/
    - /d1 
    /g1 
    - /g1/d2 
    - /g1/d3 
    /g2 
    - /g2/d4 
    /g2/g3 
     - /g2/g3/d5 

或返回的東西更多元素的替代版本可用

def scan_hdf52(path, recursive=True, tab_step=2): 
    def scan_node(g, tabs=0): 
     elems = [] 
     for k, v in g.items(): 
      if isinstance(v, h5.Dataset): 
       elems.append(v.name) 
      elif isinstance(v, h5.Group) and recursive: 
       elems.append((v.name, scan_node(v, tabs=tabs + tab_step))) 
     return elems 
    with h5.File(path, 'r') as f: 
     return scan_node(f) 

帶回報:

>>> scan_hdf5_2('/tmp/dummy.h5') 
[u'/d1', 
(u'/g1', [u'/g1/d2', u'/g1/d3']), 
(u'/g2', [u'/g2/d4', (u'/g2/g3', [u'/g2/g3/d5'])])]