2

データセットの 1 つの属性を削除して変更したい hdf5 ファイルがあり、それ以上変更せずにファイルを保存します。hdfview でこれを行うことができますが、多数のファイルに適用する必要があるため、スクリプト可能なものが必要です。

h5pyを使用して、pythonでスクリプトを書いてみました:

import h5py
inF = h5py.File("Filename.h5", 'r')
dSet = inF['/data/myDataset']
del dSet.attrs['myAttrName']

しかし、次のエラーが表示されます。

トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、ファイル "/usr/lib/python2.7/dist-packages/h5py/_hl/attrs.py"、75 行目、delitem h5a.delete(self ._id, self._e(name)) ファイル "h5a.pyx"、135 行目、h5py.h5a.delete (h5py/h5a.c:2682) の KeyError: "属性を削除できません (属性: メッセージを削除できません) )"

print dSet.attrs['myAttrName']正しい値を生成し、属性にアクセスできることを証明します。

これを行う他の方法はありますか?たぶんh5repackを使用していますか?

4

2 に答える 2

3

h5py スクリプトの問題は、ファイルを読み取り専用モード ("r") で開いたことです。次のように、append で開く必要があります。

inF = h5py.File("Filename.h5", 'a')
于 2015-02-09T05:07:41.740 に答える
1

hdfツールの1つであるh5copyを使用することになりました:

h5copy -p -i inputFile.h5 -o outputFile.h5 -s /inputDataSetName -d /outputDataSetName -f noattr

私が処理しなければならないすべてのファイルには同じデータセットがあり、データセットの数がかなり少ないため、それぞれで h5copy を呼び出すシェル スクリプトを作成しました。

グループで h5copy を実行しても、そのグループ内のすべてのデータセットの属性は削除されないことに注意してください。

于 2014-10-23T23:11:36.573 に答える