在科学计算中、卫星遥感应用等领域经常用到HDF5文件。HDF5作为分层式数据结构文件格式由组、数据集及其属性等组成,结构复杂,2分钟能掌握HDF5文件的读写吗?h5py包是管理HDF5文件的开原包之一,使用简单、方便。
结合本人多年h5py包使用经验,整理资料后,从文件、组、数据集、属性和数据类型等5个方面的使用进行归纳,精心制作了6张图,为h5py包的快速使用提供参考。
h5py整体框架
01文件
在使用HDF5文件时,一般要经过打开文件、存储缓存数据和关闭文件3个步骤。这也是读写HDF5文件的一般流程。HDF5文件打开模式共分5种,见图1。同HDF4文件的打开方式不同,'w'只是用来创建一个新的文件,同C库的creat()类似,'a'打开一个现有的文件或者创建没有的文件,使用方面。
图1 h5py中文件管理
02组
组(group)是实现HDF分层结构的主要形式。h5py包从组的创建、添加成员、组删除和读取4个方面管理组,见图2。组同文件夹类似,可以通过'/'分隔符将多层的组组合起来。HDF5文件可以认为是顶层的组,'/'。
在组内可以创建组和数据集成员,也可以通过move()和copy()方法添加已经存在的成员。在读取组成员时可以使用get()方法,可以像python字典一样,使用[]访问或者通过item()、keys()和values()编历,也可以迭代访问成员组内的成员。在删除组和组内成员时一般使用del命令,组被删除的同时组内成员一并删除。
图2 h5py中组管理
03数据集
数据集是HDF5文件的核心部分。h5py实现了数据集的创建、写入数据、读取数据和删除,见图3。在管理数据集时,h5py可以使用内置方法如create_dataset()通过指定参数进行管理,在创建时可实现数据集的分块存储、压缩、可变形状和空数据集;也可以直接像python字典一样通过'[]'直接赋值和访问,赋值时如果不存在会默认创建;也支持了索引和切片,在读写数据集时对部分数据进行读写和更新,甚至读取数据时可以设置读出的数据类型和字段说明。删除数据集同删除组的用法相同。
图3-a h5py中数据集创建
图3-b h5py中数据集管理
04属性
属性是对组和数据集本身的说明。h5py包也可以像python字典一样管理属性。通过atts获取全部属性的实例,然后创建、读取和更新,见图。在读取时,如果属性不存在则会引发异常。
图4 h5py中属性管理
05数据类型
HDF5文件支持了大多数NumPy类型,但不支持泛型、time和Unicode字符串类型。在对数据类型书写支持了字符串简明写法,例如,16位无符号整型为'uint16'或者'U16'。也支持字符串、枚举和可变类型等3种特殊类型。其中字符串类型只支持'ascii'和'utf-8'。具体见图6。
图5 h5py中数据类型
最后,h5py包管理HDF5文件非常简单、方便。本文图中的内容很丰富,无法用文字进行详细说明,另外由于篇幅所限,图种文字说明比较简略,实例较少,请多包涵。