前置き
HDF5のAttributeを読み取りたいと思って検索したが、日本語の文献は Cや fortranによる扱いばかりを説明したものばかりだった。h5pyのドキュメントをさらっと見てもよくわからなかった(たぶん説明が書いてあったんだろうが、初心者ゆえあまり理解できない部分が多かった.....
)。
stackoverflowに良い質問と回答があったので(以下リンク)、ほとんどそれの翻訳みたいなことをしよう と思って書かれたのが当記事です。
HDF5のAttributeの読み取り
手順は
-
h5py
をimport
- (ファイルを開くときは with がより良いらしい)
- GroupやDatasetに
.attrs
を付けることでその Attributeを辞書みたいな感じで取得できる - さらに
.keys()
を付ければ、Attributeの名前にアクセスできる - 3.によって得た Attributeに 4.で得た Attributeの名前を辞書キーのように指定すれば、Attributeの中身を配列として取り出せる。
import h5py
with h5py.File("path/to/hdf5file", 'a') as f:
# Attributeには .attrs でアクセスできる(手順3)
attr_exmpl = f["path/to/Group_or_Dataset"].attrs
print("読み込んだAttributeは:", attr_exmpl)
### 読み込んだAttributeは: <Attributes of HDF5 object at [数字]>
# これに辞書のようにキーを付ければ中身を取り出せる。
# Attributeのリストは辞書と同じように .keys() で得られる(手順4)
print( attr_exmpl.keys() )
### <KeysViewHDF5 ['attr0', 'attr1', 'attr2', 'attr3', 'attr4']>
# これを用いて、それぞれのAttributeの中身のデータを表示させる(手順5)
for k in attr_exmpl.keys():
print( f"{k} : {attr_exmpl[k]}" )
#(テキトーな出力例↓)
### attr0 : 10
### attr1 : [0 1 2 3 4]
### attr2 : [[0 1 2]
### [3 4 5]]
### attr3 : 0.
### attr4 : [1. 1. 1.]
Attributeの作成
Attributeは辞書みたいなものなので、作成するときも辞書と同様。
with h5py.File("path/to/hdf5file", 'a') as f:
# Attributeには .attrs でアクセスできる
attr_exmpl = f["path/to/Group_or_Dataset"].attrs
# Attributeを追加(辞書と同じ書き方)
attr_exmpl['new_attr'] = 5
まとめ
with h5py.File(filename, 'r') as f:
f['dataset'].attrs['name_of_attribute']
で Attributeの中身を見ることができる。
作成する際も上の画像と同じ形で書けばよい(辞書と同じ)。
追記(公式ドキュメントを見ればわかる話でした)
前置きでも言い訳したように、公式ドキュメントを読んでも基礎知識の不足であまり理解できず、stackoverflowから具体的な操作を学び、それをこちらに日本語化したわけですが.....
答えを知ったうえで公式ドキュメントを読み返すと、内容が理解できました。
こういうことは "初心者あるある" ではないでしょうか。