玩转HDF5数据:用Python的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数据

软件:HDF Explorer

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

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

  1. Python中的h5py包使用(详细图文教程)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值