h5py

概念

h5py是用来操作HDF5格式的Python库。HDF5格式用来存储用于机器学习的海量数据,这是一个二进制格式的文件。其中包括两类对象:dataset和group,dataset是类似于数组的数据集,group是类似文件夹的容器。

HDF5的读写操作

创建dataset

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
import os
if os.path.exists('test.h5'):
os.remove('test.h5')
f = h5py.File('test.h5', 'w') # 创建文件
# 方式①
d1 = f.create_dataset('dataset1', (5, ), 'i') # 创建dataset,三个参数分别为:名称, shape, 类型
d1[...] = np.arange(5) # 赋值
# 方式②
f['dataset2'] = np.arange(8).reshape(4, 2) # 创建 + 赋值
# 方式③
f.create_dataset('dataset3', data = np.arange(4))
for key in f.keys():
print(key)
print(f[key].name)
print(f[key].shape)
print(f[key].value)

执行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dataset1
/dataset1
(5,)
[0 1 2 3 4]
dataset2
/dataset2
(4, 2)
[[0 1]
[2 3]
[4 5]
[6 7]]
dataset3
/dataset3
(4,)
[0 1 2 3]

创建group

1
2
3
4
5
6
7
8
g1 = f.create_group('group1') # 创建group
g1['dataset1'] = np.arange(8).reshape(2, 4) # 在group内创建dataset
d = g1.create_dataset('dataset2', data = np.arange(5))
for key in g1.keys():
print(g1[key].name)
print(g1[key].value)

执行结果

1
2
3
4
5
/group1/dataset1
[[0 1 2 3]
[4 5 6 7]]
/group1/dataset2
[0 1 2 3 4]

读文件

1
2
3
4
5
6
7
8
9
10
11
12
h5 = h5py.File('test.h5', 'r')
for key in h5.keys():
if isinstance(h5[key], h5py.Group): # 如果是group,再遍历器内部数据
group = h5[key]
for childkey in group.keys():
print(group[childkey].name)
print(group[childkey].value)
else: # 如果是dataset,直接打印结果
dataset = h5[key]
print(dataset.name)
print(dataset.shape)
print(dataset.value)

执行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/dataset1
(5,)
[0 1 2 3 4]
/dataset2
(4, 2)
[[0 1]
[2 3]
[4 5]
[6 7]]
/dataset3
(4,)
[0 1 2 3]
/group1/dataset1
[[0 1 2 3]
[4 5 6 7]]
/group1/dataset2
[0 1 2 3 4]

参考资料: HDF5 for Python 本文@github