使用h5py过滤hdf5文件中的组

问题描述 投票:0回答:1

我有一个问题,我找到了一个不错的解决方案,并想知道是否有更好的方法可以做到这一点。 (使用python 3.6)

我想将实验的一组结果存储在.hdf5文件的不同组中。但是我然后希望能够打开文件,遍历所有组,并且仅从特定种类的组中获取数据集。

我发现的优雅解决方案是保留信息以区分组名称中的组。例如01中的"ExpA01"

生成文件的代码:

import h5py
import numpy as np


if __name__ == "__main__":
    # name of the file
    FileName = "myFile.hdf5"

    # open the file
    myFile = h5py.File(FileName, 'w')

    # list of groups
    NameList = ["ExpA01", "ExpA02", "ExpB01", "ExpB02"]

    for name in NameList:

        # create new group with the name from the nameList
        myFile.create_group(name)

        # create random data
        dataset = np.random.randint(0, 10, 10)
        # add data set to the group
        myFile[name].create_dataset("x", data=dataset)

    myFile.close()  # close the file

现在,我只想从以"01"结尾的组中读取数据。为此,我基本上从组名myFile[k].name.split("/")[-1][-2::] == "01"中读取信息。

读取文件的代码:

import h5py
import numpy as np


if __name__ == "__main__":

    FileName = "myFile.hdf5"

    # open the file
    myFile = h5py.File(FileName, 'r')

    for k in myFile.keys():  # loop over all groups
        if (myFile[k].name.split("/")[-1][-2::] == "01"):
            data = np.zeros(myFile[k]["x"].shape)
            myFile[k]["x"].read_direct(data)

            print(data)

myFile.close()

总之,将区分信息写入组名,然后将字符串切成薄片是一个丑陋的解决方案。

什么是更好的方法?

感谢阅读。

python hdf5 h5py
1个回答
0
投票

您是否考虑过向每个组添加属性?然后,您可以基于对属性值的测试来过滤组。属性数据类型没有限制。我的示例使用字符串,但它们可以是整数或浮点数。

# Quick example to create a group attribute, then retrieve:
In [3]: h5f = h5py.File('attr_test.h5','w')
In [4]: grp = h5f.create_group('group1')
In [5]: h5f['group1'].attrs['key']='value'
   ...: 
In [6]: get_value = h5f['group1'].attrs['key']
In [7]: print (get_value)
value
© www.soinside.com 2019 - 2024. All rights reserved.