h5py

h5py文件是存放两类对象的容器,数据集(dataset)和组(group),dataset类似数组类的数据集合,和numpy的数组差不多。group是像文件夹一样的容器,它好比python中的字典,有键(key)和值(value)。group中可以存放dataset或者其他的group。”键”就是组成员的名称,”值”就是组成员对象本身(组或者数据集),下面来看下如何创建组和数据集。

基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import h5py
import numpy as np
#生成文件,要是读取文件的话,就把w换成r
f=h5py.File("mydataset.h5","w")
#创建数据集
d1=f.create_dataset("dset1",(3,4),'i')
#赋值
d1[...]=np.arange(12).reshape((3,4))
#同时创建并赋值
f["dset2"]=np.arange(15)
#已有numpy数组,创建数据集并赋值
a=np.arange(20)
d1=f.create_dataset("dset3",data=a)
for key in f.keys():
print(f[key].name)
print(f[key].value)

group

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import h5py
import numpy as np
f=h5py.File("myh5py.hdf5","w")

#创建一个名字为bar的组
g1=f.create_group("bar")

#在bar这个组里面分别创建name为dset1,dset2的数据集并赋值。
g1["dset1"]=np.arange(10)
g1["dset2"]=np.arange(12).reshape((3,4))

for key in g1.keys():
print(g1[key].name)
print(g1[key].value)

文件读写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import h5py
import numpy as np
file=h5py.File("TrainSet_rotate.h5","w")

data = np.array( [222,333,444] )
label = np.array( [0,1,0] )
img_num = np.array( [0,1,2] )

# 写入
file.create_dataset('train_set_x', data = data)
file.create_dataset('train_set_y', data = label)
file.create_dataset('train_set_num',data = img_num)

# 。。。。。。。。。
file.close()

# 读方式打开文件
file=h5py.File('TrainSet_rotate.h5','r')
# 尽管后面有 '[:]', 但是矩阵怎么进去的就是怎么出来的,不会被拉长(matlab后遗症)
train_set_data = file['train_set_x'][:]
train_set_y = file['train_set_y'][:]
train_set_img_num = file['train_set_num'][:]
# .........
file.close()