HDF5
是一种文件压缩格式,全称为Hierarchical Data Format
。具有读写速度快,内存占用少,压缩率很高。因此在计算机视觉、医学图像处理领域推荐使用。
HDF5
在python
中的使用主要依赖于h5py
这个包。因此,在使用之前应该先进行安装。
HDF5
主要的对象有两种:datasets
和groups
。datasets
类似于numpy
数组类型,而groups
则类似于python
中的字典类型。
具体的使用方法,先看一段代码:
import h5py
import numpy as np
# 定义变量
my_name = 'JianJuly'.encode('utf-8')
my_school = 'USTC'.encode('utf-8')
my_birthday = np.array([1990, 10, 18])
my_age = 18
# 写入HDF5
f = h5py.File('student.h5','w')
f.create_dataset('name', data=my_name)
f['school'] = my_school
f.create_dataset('birthday', data=my_birthday)
f.create_dataset('age', data=my_age)
f.close()
# 读取HDF5
g = h5py.File('student.h5','r')
real_name = g['name'].value.decode('utf-8')
real_school = g['school'][()].decode('utf-8')
real_age = g['age'].value
real_birthday = g['birthday'][()]
g.close()
print('===============summarise=========================')
print('my name is {}'.format(real_name))
print('my school is {}'.format(real_school))
print('my birthday is {0[0]}, {0[1]}, {0[2]}'.format(real_birthday))
print('my age is {}'.format(real_age))
输出:
===============summarise=========================
my name is JianJuly
my school is USTC
my birthday is 1990, 10, 18
my age is 18
几点注释:
encode
函数,因为HDF5的数据类型是类似于numpy
的,如果想用它来存储字符串,必须对字符串进行编码。在这里我们使用了utf-8
的编码格式。关于编码的更多知识,可参见【理解计算机】字符编码:ASCII,Unicode 和 UTF-8一节;hdf5
文件时,有多种模式可供选择。最常用的是r
和w
,分别代表读和写。 以w
方式打开文件时,如果文件不存在,则新建一个; create_dataset
方法。其中name
为键名,my_name
为键值;value
方法获取键值,通过调用decode
对字符串进行解码[()]
方法获取该键的键值。将hdf5
的读写封装成函数
import h5py
def load_hdf5(infile):
with h5py.File(infile,"r") as f:
return f["image"][()]
def write_hdf5(arr,outfile):
with h5py.File(outfile,"w") as f:
f.create_dataset("image", data=arr, dtype=arr.dtype)
image
;arr
为需要存储的数据,应位numpy
数组,因为普通的python
数据类型没有dtype
属性;infile
和outfile
为文件名。