我有一个问题,我找到了一个不错的解决方案,并想知道是否有更好的方法可以做到这一点。 (使用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()
总之,将区分信息写入组名,然后将字符串切成薄片是一个丑陋的解决方案。
什么是更好的方法?
感谢阅读。
您是否考虑过向每个组添加属性?然后,您可以基于对属性值的测试来过滤组。属性数据类型没有限制。我的示例使用字符串,但它们可以是整数或浮点数。
# 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