Python h5py库基础教程:文件创建、数据集与组管理详解
本文详细介绍Python中h5py库的基础用法,涵盖HDF5文件的创建、数据集(dataset)与组(group)的管理。通过具体代码示例,演示如何创建文件句柄、定义数据类型与形状、直接赋值以及嵌套组的结构操作,帮助开发者快速掌握HDF5文件的基本读写流程。
一、h5py模块介绍
本文旨在简要介绍h5py库的基本功能,包括如何创建HDF5文件、构建数据集以及读取数据。若需深入掌握h5py的高级特性,建议查阅h5py官方文档以获取更详尽的技术资料。
h5py简单介绍
HDF5文件本质上是一个容器,用于存储两类核心对象:dataset(数据集)和group(组)。Dataset类似于数组结构,而Group则类似于文件夹容器,其逻辑结构类似于Python中的字典,包含键(key)和值(value),用于存放Dataset及其他Group。在使用h5py时,请牢记以下核心概念:
groups类比字典,dataset类比Numpy中的数组。
尽管HDF5的Dataset在接口设计上与Numpy数组相似,但它支持更多对应用程序透明的
存储特征,例如:数据压缩,误差检测,以及分块传输。
二、h5py模块使用
使用h5py创建的文件,其标准后缀名为:
.hdf5
1、h5py接口简单介绍
使用h5py模块主要包含以下两个步骤:
- 1)创建
.hdf5类型的文件句柄(即创建一个文件对象)。# 若需读取文件,请将模式参数“w”改为“r”
f=h5py.File("myh5py.hdf5","w")
- 2)创建数据(dataset)或组(group)
创建数据(dataset)示例如下:
f.create_dataset(self, name, shape=None, dtype=None, data=None, **kwds)
创建组(group)示例如下:
create_group(self, name, track_order=False)
2、h5py的使用样例
- 创建一个h5py文件
import h5py
#要是读取文件的话,就把w换成r
f=h5py.File("myh5py.hdf5","w")执行上述代码后,当前目录下将生成一个名为myh5py.hdf5的文件。
- 创建dataset数据集
import h5py
f=h5py.File("myh5py.hdf5","w")
#deset1是数据集的name,(20,)代表数据集的shape,i代表的是数据集的元素类型
d1=f.create_dataset("dset1", (20,), 'i')
for key in f.keys():
print(key)
print(f[key].name)
print(f[key].shape)
print(f[key].value)
输出:
dset1
/dset1
(20,)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]此处我们仅创建了一个包含20个整型元素的数据集,未进行赋值操作,因此默认值全为0。如需为数据集赋值,请参考后续代码示例。
import h5py
import numpy as np
f=h5py.File("myh5py.hdf5","w")
d1=f.create_dataset("dset1",(20,),'i')
#赋值
d1[...]=np.arange(20)
#或者我们可以直接按照下面的方式创建数据集并赋值
f["dset2"]=np.arange(15)
for key in f.keys():
print(f[key].name)
print(f[key].value)
输出:
/dset1
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
/dset2
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]如果已有现成的numpy数组,可以在创建数据集时直接赋值,此时无需显式指定数据类型和形状,只需将数组名传给参数data即可。
import h5py
import numpy as np
f=h5py.File("myh5py.hdf5","w")
a=np.arange(20)
d1=f.create_dataset("dset1",data=a)
for key in f.keys():
print(f[key].name)
print(f[key].value)
输出:
/dset1
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]下面将上述几种创建方式混合编写,请观察以下代码。
import h5py
import numpy as np
f=h5py.File("myh5py.hdf5","w")
#分别创建dset1,dset2,dset3这三个数据集
a=np.arange(20)
d1=f.create_dataset("dset1",data=a)
d2=f.create_dataset("dset2",(3,4),'i')
d2[...]=np.arange(12).reshape((3,4))
f["dset3"]=np.arange(15)
for key in f.keys():
print(f[key].name)
print(f[key].value)
输出:
/dset1
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
/dset2
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
/dset3
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
3. 创建group组
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)
输出:
/bar/dset1
[0 1 2 3 4 5 6 7 8 9]
/bar/dset2
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]请注意观察数据集dset1和dset2的名称与前文示例有何不同。如果数据集直接创建在根目录下,其名称格式为/+名字;而当数据集位于某个group(组)内部时,名称变为/bar+/名字,这体现了类似文件目录的结构感。继续阅读后续代码,将有助于进一步理解group与dataset之间的层级关系。
import h5py
import numpy as np
f=h5py.File("myh5py.hdf5","w")
#创建组bar1,组bar2,数据集dset
g1=f.create_group("bar1")
g2=f.create_group("bar2")
d=f.create_dataset("dset",data=np.arange(10))
#在bar1组里面创建一个组car1和一个数据集dset1。
c1=g1.create_group("car1")
d1=g1.create_dataset("dset1",data=np.arange(10))
#在bar2组里面创建一个组car2和一个数据集dset2
c2=g2.create_group("car2")
d2=g2.create_dataset("dset2",data=np.arange(10))
#根目录下的组和数据集
print(".............")
for key in f.keys():
print(f[key].name)
#bar1这个组下面的组和数据集
print(".............")
for key in g1.keys():
print(g1[key].name)
#bar2这个组下面的组和数据集
print(".............")
for key in g2.keys():
print(g2[key].name)
#顺便看下car1组和car2组下面都有什么,估计你都猜到了为空。
print(".............")
print(c1.keys())
print(c2.keys())
输出:
.............
/bar1
/bar2
/dset
.............
/bar1/car1
/bar1/dset1
.............
/bar2/car2
/bar2/dset2
.............
[]
[]Reference:
1、blog.csdn.net/csdn1569884…
2、blog.csdn.net/yudf2010/ar…
至此,关于Python中h5py开源库的使用介绍完毕。如需了解更多关于python h5py的内容,请搜索本站历史文章或继续浏览相关教程。感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









