import h5py
f = h5py.File('test.h5','w') #创建一个名为“test.h5”的h5py文件,文件索引为f
f = h5py.File('test.h5','r') #"r"或"rb"#读取文件
a1=(1,2,3,4,5)
a2=((2,2),(3,4),(9,7))
data = f.create_group("g1")#创建一个名为g1的组,data是该组的索引
data['k1']=a1 #为g1组添加成员,成员名为k1,并将数组a1的值赋给k1
data['k2']=a2#注意是用“data”而不是“g1”,因为data才是索引
#成员的赋值可以是其它来源的数据,例如从文件中读取的某个属性值等。
输出组中成员的名字和数据的方法有两种:
(1)用组的keys()函数
for key in data.keys(): #注意是"data.keys()"而不是"f.keys()"
print(data[key].name)
print(data[key].value)
输出结果:
/g1/k1
[1 2 3 4 5]
/g1/k2
[[2 2]
[3 4]
[9 7]]
(2)用组+成员名字
print(f['g1/k1'].name)#注意要加上组的名字,只有成员的名字无法输出
print(f['g1/k1'].value)#成员可以用value输出值,组不能。
print(f['g1/k2'].name)
print(f['g1/k2'].value)
输出结果(和1中结果相同):
/g1/k1
[1 2 3 4 5]
/g1/k2
[[2 2]
[3 4]
[9 7]]
group的成员就是dataset,在为组创建成员的时候其实就是在组中创建了不同是数据集。但也可以直接对h5py文件创建数据集。
dataset1=f.create_dataset("d1")
ds1=f.create_dataset("dset1",(5,),'i')#创建一个名为dset1的数据集,形状为(5,),数据类型为int型
#(创建数据集时必须要指定形状,创建组时可以没有)
ds1[...]=a1#赋值方式1:用数据集的索引,
#或者我们可以直接按照下面的方式创建数据集并赋值
f["dset2"]=a2#赋值方式2:用文件索引和数据集名称
输出组中成员的名字和数据的方法有两种:
(1)用数据集的索引来输出数据
print(ds1.value)
print(ds1.name)
# 这种方式下,由于没有为dset2创建索引(如“ds2”),因此无法输出
#
输出结果:
/dset1
[1 2 3 4 5]
(2)用文件索引和数据集的名字
print(f['dset1'].name)
print(f['dset1'].value)
print(f['dset2'].name)#这种方式可以直接利用数据集的名字来输出数据
print(f['dset2'].value)
输出结果:
/dset1
[1 2 3 4 5]
/dset2
[[2 2]
[3 4]
[9 7]]
(参考博客:https://blog.csdn.net/yudf2010/article/details/50353292?utm_source=copy )
为了遍历一个group内的所有直接和间接成员,我们可以使用group的visit()和visititerms()方法,这些方法需要接收一个回调函数作为参数。
def printname(name):
print name
f.visit(printname)
输出:
mydataset
subgroup
subgroup/another_dataset
subgroup2
subgroup2/dataset_three
其它博客参考:
https://blog.csdn.net/csdn15698845876/article/details/73278120 https://blog.csdn.net/Jasminexjf/article/details/79820413
h5py官方文档:http://docs.h5py.org/en/stable/index.html