玩转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操作。
相关文章
|
5月前
|
Java Go 开发者
开发效率三剑客:代码格式化、接口调试与文档生成
本文系统讲解现代软件开发三大关键环节:代码格式化(统一风格、提升可读性)、接口调试(精准验证、Mock协同)与文档生成(代码即文档、实时同步)。涵盖Python/Java/Go等主流语言工具推荐及CI/CD集成实践,助力零基础开发者高效入门、规避低级错误。(239字)
330 0
|
Shell
wget同时下载多个文件
wget同时下载多个文件
1137 0
|
5月前
|
域名解析 缓存 网络协议
DNS 与 hosts 文件:Windows 11 中的名称解析配置
本文详解Windows域名解析机制,重点对比hosts文件(本地静态映射,优先级最高)与DNS(远程动态查询)的原理、配置及优先级顺序,并指导如何在Win11中修改hosts、刷新缓存、设置DNS服务器,涵盖开发测试、访问加速、广告屏蔽等实用场景。
|
存储 Linux Go
基于MinIO搭建高性能文件服务器
基于MinIO搭建高性能文件服务器
1969 0
基于MinIO搭建高性能文件服务器
|
5月前
|
运维 网络协议 数据可视化
KKCE在线Ping工具说明
KKCE在线Ping是一款零门槛云端网络诊断工具,无需安装、不需命令行,浏览器打开即用。支持多节点ICMP/TCP检测,实时显示延迟、丢包等指标,并集成DNS查询、HTTP测速等功能,兼顾普通用户故障排查与运维人员专业监测需求。(239字)
421 1
|
5月前
|
人工智能 安全 机器人
我们来说说到底什么是 agent ?
我是小假 期待与你的下一次相遇 ~
1535 1
|
5月前
|
Java 应用服务中间件 Apache
2026最新Tomcat安装和配置保姆级教程(附安装包+图文步骤)
Apache Tomcat是开源轻量级Java Web服务器与Servlet容器,支持Servlet、JSP、WebSocket等规范。解压即用,部署.war包即可运行Web应用,广泛用于开发与测试。推荐使用Tomcat 10.1.x或11.x(需JDK 11+),注意jakarta.*命名空间迁移。
|
8月前
|
存储 人工智能 缓存
一种基于分层记忆与注意力约束的对话AI架构
本文提出一种新型对话AI记忆架构:从空白记忆库起步,分三层(核心/中层/临时)动态存储信息;通过两层过滤(模型识别+用户反馈)精准入库;采用注意力降压、高频抑制等机制杜绝复读;核心记忆上锁保护,满库自动清理。让AI真正“记得住、不啰嗦、不乱记、越聊越懂你”。(239字)
|
机器学习/深度学习 人工智能 算法
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型
本文介绍了如何使用 Python 和 YOLO v8 开发专属的 AI 视觉目标检测模型。首先讲解了 YOLO 的基本概念及其高效精准的特点,接着详细说明了环境搭建步骤,包括安装 Python、PyCharm 和 Ultralytics 库。随后引导读者加载预训练模型进行图片验证,并准备数据集以训练自定义模型。最后,展示了如何验证训练好的模型并提供示例代码。通过本文,你将学会从零开始打造自己的目标检测系统,满足实际场景需求。
16868 1
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型