玩转HDF5数据:用Python的h5py实现高效数据管理

简介: 本文围绕用Python的h5py实现HDF5数据高效管理展开。先介绍HDF5优势,如层次分明、高效存储、跨平台等。接着讲解文件结构,展示h5py安装、文件流获取、数据读写等操作,还提及进阶技巧、查看数据软件、常见问题及参考资料。

诸神缄默不语-个人技术博文与视频目录

为什么选择HDF5?

在数据处理领域,HDF5(Hierarchical Data Format)可谓是大数据时代的隐形冠军。相比传统的CSV、Excel等格式,HDF5拥有三大杀手锏:

  1. 层次分明 - 类文件夹结构管理数据
  2. 高效存储 - 支持TB级数据快速存取
  3. 跨平台 - 通用格式无缝衔接各语言

特别适合处理科学计算、深度学习中的海量数据,堪称数据管理的瑞士军刀。

一、HDF5文件结构解密

打开HDF5文件就像进入一个数据超市:

  • Groups:类似文件夹,用于组织数据
  • Datasets:实际存储的多维数据矩阵
  • Attributes:元数据标签,记录关键信息

    二、Python实战:h5py快速上手

    h5py官方文档:https://docs.h5py.org/en/stable/index.html

    2.1 安装只需1行

    pip install h5py
    

    2.2 获取HDF5文件流

    通过h5py.File(path,mode)可以新建或者获取已有的HDF5文件流。

mode:

  • "w":会覆盖已存在的文件,直接创建新的HDF5数据
  • "r":默认模式,只读
  • "r+":可修改

创建hdf5文件的示例:(这里是用上下文管理器(with语句)来保证文件关闭,如果直接将文件流放到内存里,要记得close()掉)

import h5py

# 创建新文件('w'模式会覆盖已存在的文件)
with h5py.File('my_data.hdf5', 'w') as f:
    # 创建数据集:存储10x10的随机矩阵
    f.create_dataset('temperature', data=np.random.rand(10,10))  # 指定data的写法
    f.create_dataset('calender', (3,4))  # 指定shape的写法

    # 添加元数据
    f.attrs['create_date'] = '2024-03-20'

2.3 数据读写

with h5py.File('my_data.hdf5', 'r+') as f:
    # 读取数据
    temp_data = f['temperature']  # h5py._hl.dataset.Dataset
    temp_data_value = temp_data[:]  # numpy.ndarray

    print(temp_data.name)  # temperature
    print(temp_data.shape)  # (10,10)
    print(temp_data.dtype)  # float64

    # 修改部分数据
    f['temperature'][0,0] = 36.5

    # 修改所有数据
    f['temperature'][...] = numpy_data

    # 创建group
    group = f.create_group('sensors')  # h5py.Group

    # 获取group对象到内存中也使用键名
    group = f["sensors"]

    # 获取所有键名(这里包括dataset和group)
    keys = f.keys()  # 返回一个迭代器

    # 用f.visit(func)来直接遍历所有dataset和group
    def print_name(name):
        print(name)
    f.visit(print_name)

    # group就完全可以当成hdf5来用,创建数据什么的都跟hdf5文件流的一样:
    group.create_dataset('sensor1', data=[1,2,3])  # 指定data的写法
    group.create_dataset('sensor2', (3,4))  # 指定shape的写法

三、高手技巧:进阶操作

3.1 分块存储大文件

# 创建支持分块存储的数据集
dset = f.create_dataset("big_data", (1000, 1000),
                        chunks=(100, 100),
                        compression="gzip")

常用压缩方式对比:

压缩方式 压缩率 速度
gzip
lzf 最快
szip

四、直观查看hdf5数据

软件1:HDF Explorer

键名如果是中文而想直接显示的话似乎必须是GBK编码的字节流格式才行呢。

软件2:HDFView

五、常见问题

  1. OSError: Unable to open file(file signature not found):这就是纯文件损坏的问题,我是U盘传HDF5文件后中出现的这个问题,换个移动硬盘就好了。

    六、本文撰写过程中参考的其他网络资料

  2. Python中的h5py包使用(详细图文教程)
  3. 报错:h5文件读取失败-OSError:Unable to open file (file signature not found) - pythoner_wl - 博客园
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
相关文章
|
20天前
|
域名解析 缓存 网络协议
DNS 与 hosts 文件:Windows 11 中的名称解析配置
本文详解Windows域名解析机制,重点对比hosts文件(本地静态映射,优先级最高)与DNS(远程动态查询)的原理、配置及优先级顺序,并指导如何在Win11中修改hosts、刷新缓存、设置DNS服务器,涵盖开发测试、访问加速、广告屏蔽等实用场景。
|
存储 消息中间件 架构师
如何估算集群所需的存储、计算资源?
如何估算集群所需的存储、计算资源?
|
21天前
|
人工智能 安全 机器人
我们来说说到底什么是 agent ?
我是小假 期待与你的下一次相遇 ~
590 1
|
20天前
|
Java 应用服务中间件 Apache
2026最新Tomcat安装和配置保姆级教程(附安装包+图文步骤)
Apache Tomcat是开源轻量级Java Web服务器与Servlet容器,支持Servlet、JSP、WebSocket等规范。解压即用,部署.war包即可运行Web应用,广泛用于开发与测试。推荐使用Tomcat 10.1.x或11.x(需JDK 11+),注意jakarta.*命名空间迁移。
|
21天前
|
Web App开发 数据采集 前端开发
如何在VSCode中查看、转换markdown文件:使用MPE(Markdown Previe Enhanced)插件
本文介绍了在VSCode中使用MPE插件处理Markdown文件的方法。主要内容包括:1)MPE插件的安装;2)查看Markdown渲染效果的两种方式(内置快捷键和MPE右键预览);3)Markdown文件转换功能,详细讲解了导出HTML(离线/在线模式)、PDF(Chrome/Prince/Pandoc三种方式)和Word的操作步骤及注意事项。文章还提供了相关软件的安装指南和常见问题解决方案,帮助用户更好地使用MPE插件进行Markdown文档处理。
如何在VSCode中查看、转换markdown文件:使用MPE(Markdown Previe Enhanced)插件
|
20天前
|
存储 人工智能 JSON
日抛型软件的双链路设计——从"日抛"到"认知进化"的范式革命
本文提出AI时代“日抛型软件”新范式:日抛非终点,而是进化起点。基于AISTUDIO双线架构(Build链即时生成+Designer链持久沉淀),实现“双遗产”——参数权重持续优化(越用越懂用户)与领域知识动态沉淀(生成越来越专业),推动软件从消耗品跃升为认知引擎。(239字)
|
21天前
|
运维 网络协议 数据可视化
KKCE在线Ping工具说明
KKCE在线Ping是一款零门槛云端网络诊断工具,无需安装、不需命令行,浏览器打开即用。支持多节点ICMP/TCP检测,实时显示延迟、丢包等指标,并集成DNS查询、HTTP测速等功能,兼顾普通用户故障排查与运维人员专业监测需求。(239字)
186 1
|
21天前
|
Java Go 开发者
开发效率三剑客:代码格式化、接口调试与文档生成
本文系统讲解现代软件开发三大关键环节:代码格式化(统一风格、提升可读性)、接口调试(精准验证、Mock协同)与文档生成(代码即文档、实时同步)。涵盖Python/Java/Go等主流语言工具推荐及CI/CD集成实践,助力零基础开发者高效入门、规避低级错误。(239字)
152 0
|
23天前
|
数据采集 缓存 JSON
淘宝/天猫 API 数据采集实战:item_get 接口字段详解与常见报错(如 invalid num_iid)解决方案(附源码)
本文详解淘宝/天猫`item_get`接口(对应官方`taobao.item.get`),聚焦新手高频痛点:`invalid num_iid`、签名错误与频率限制。涵盖num_iid正确提取(11–13位纯数字)、核心字段解析、错误根因诊断,并提供含签名生成、参数校验及多级错误处理的可运行Python源码,助你快速稳定接入。(239字)
|
23天前
|
移动开发 人工智能 小程序
私域直播系统源码开发指南:APP、小程序、H5如何统一搭建?
随着私域流量运营持续升温,越来越多企业开始布局私域直播平台。本文从软件开发角度出发,详细解析私域直播系统源码的核心架构,包括APP、小程序、H5三端统一搭建方案、用户体系整合、跨端开发框架以及后台运营系统设计。