LoginSignup
4
1

More than 1 year has passed since last update.

HDF5のAttribute(属性)の作成・読み取り by Python (h5py)

Last updated at Posted at 2022-03-28

前置き

HDF5のAttributeを読み取りたいと思って検索したが、日本語の文献は Cや fortranによる扱いばかりを説明したものばかりだった。h5pyのドキュメントをさらっと見てもよくわからなかった(たぶん説明が書いてあったんだろうが、初心者ゆえあまり理解できない部分が多かった.....)。

stackoverflowに良い質問と回答があったので(以下リンク)、ほとんどそれの翻訳みたいなことをしよう と思って書かれたのが当記事です。

HDF5のAttributeの読み取り

手順は

  1. h5pyimport
  2. (ファイルを開くときは with がより良いらしい)
  3. GroupやDatasetに .attrs を付けることでその Attributeを辞書みたいな感じで取得できる
  4. さらに .keys() を付ければ、Attributeの名前にアクセスできる
  5. 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の中身を見ることができる。
attributeofhdf5.jpg

作成する際も上の画像と同じ形で書けばよい(辞書と同じ)。

追記(公式ドキュメントを見ればわかる話でした)

前置きでも言い訳したように、公式ドキュメントを読んでも基礎知識の不足であまり理解できず、stackoverflowから具体的な操作を学び、それをこちらに日本語化したわけですが.....

答えを知ったうえで公式ドキュメントを読み返すと、内容が理解できました。
こういうことは "初心者あるある" ではないでしょうか。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1