Python h5py库基础教程:文件创建、数据集与组管理详解

花开有时
花开有时
发布时间:2026-10-12| 3人浏览过
原创

本文详细介绍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的内容,请搜索本站历史文章或继续浏览相关教程。感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。