h5py 常用API

h5py 是一个强大的 Python 库,用于与 HDF5 文件进行交互。HDF5(Hierarchical Data Format)是一种用于存储和组织大规模科学数据的文件格式。h5py 允许用户创建、读取和修改 HDF5 文件中的数据集和元数据。

下面是 h5py 库的一些常见 API 和操作示例:

1. 导入 h5py

import h5py

2. 创建 HDF5 文件

你可以使用 h5py.File() 函数来创建或打开 HDF5 文件,并指定模式:

  • 'w':写入模式,创建新文件或覆盖现有文件。
  • 'r':只读模式,打开现有文件。
  • 'a':追加模式,打开文件用于读写,如果文件不存在则创建它。
# 创建一个新的 HDF5 文件
with h5py.File('example.h5', 'w') as f:
    pass  # 文件创建成功后可以在此处添加数据

3. 创建数据集

数据集(Dataset)是 HDF5 文件中的主要数据存储结构,类似于 NumPy 数组。可以使用 create_dataset() 方法创建一个新的数据集。

import numpy as np

with h5py.File('example.h5', 'w') as f:
    # 创建一个形状为 (100, 100) 的数据集,数据类型为浮点数
    dset = f.create_dataset('my_data', (100, 100), dtype='f4')
    
    # 也可以从现有的 NumPy 数组创建数据集
    data = np.arange(100).reshape(10, 10)
    f.create_dataset('array_data', data=data)

4. 读取数据集

通过 h5py.File() 打开文件后,可以像字典一样访问文件中的数据集,并使用 [:] 操作符读取数据。

with h5py.File('example.h5', 'r') as f:
    # 获取数据集对象
    dset = f['my_data']
    
    # 读取数据
    data = dset[:]  # 读取整个数据集
    print(data.shape)

5. 创建和读取压缩数据集

HDF5 支持数据压缩,h5py 通过 compression 参数启用压缩。常用的压缩方法是 gzip

with h5py.File('compressed.h5', 'w') as f:
    # 创建一个使用 gzip 压缩的数据集
    dset = f.create_dataset('compressed_data', (1000, 1000), compression="gzip", compression_opts=9)
    
    # 写入随机数据
    dset[:, :] = np.random.random((1000, 1000))

在读取压缩数据时不需要额外的操作,h5py 会自动解压缩。

with h5py.File('compressed.h5', 'r') as f:
    # 读取压缩数据集
    data = f['compressed_data'][:]
    print(data.shape)

6. 数据集切片与访问

类似于 NumPy 数组,HDF5 数据集可以进行切片操作,只读取数据集的一部分,而不需要将整个数据集加载到内存中。

with h5py.File('example.h5', 'r') as f:
    # 只读取数据集的一部分
    partial_data = f['my_data'][10:20, 10:20]
    print(partial_data)

7. 创建分块(Chunked)数据集

分块数据集允许按块存储数据,这样可以优化大规模数据集的存储和读取性能。通过设置 chunks 参数来启用分块。

with h5py.File('chunked_data.h5', 'w') as f:
    # 创建分块数据集,每块的大小为 (100, 100)
    dset = f.create_dataset('chunked_data', (1000, 1000), chunks=(100, 100))
    
    # 写入数据
    dset[:, :] = np.random.random((1000, 1000))

8. 管理元数据(Attributes)

每个数据集和文件对象都可以存储 属性(Attributes),这些属性是附加的元数据。你可以通过字典的方式来读写属性。

with h5py.File('example.h5', 'w') as f:
    # 创建一个数据集
    dset = f.create_dataset('my_data', (100, 100))
    
    # 设置属性
    dset.attrs['description'] = 'This is a dataset of random numbers'
    dset.attrs['units'] = 'arbitrary'
    
    # 读取属性
    description = dset.attrs['description']
    units = dset.attrs['units']
    print(description, units)

9. 创建和读取组(Groups)

组(Groups)是 HDF5 文件中的容器,用于组织数据集。你可以将组看作是类似文件系统中的文件夹,数据集就是文件。

with h5py.File('group_example.h5', 'w') as f:
    # 创建一个组
    group = f.create_group('experiment_1')
    
    # 在组内创建数据集
    group.create_dataset('temperature', (100,))
    group.create_dataset('pressure', (100,))
    
    # 访问组内数据集
    temp_data = f['experiment_1/temperature'][:]

10. 遍历 HDF5 文件

可以遍历 HDF5 文件中的所有组和数据集。visit()visititems() 方法可以帮助遍历整个文件。

with h5py.File('group_example.h5', 'r') as f:
    # 访问所有的数据集名称
    def print_name(name):
        print(name)
    
    f.visit(print_name)  # 递归访问所有节点(组和数据集)

    # 访问数据集的详细信息
    def print_name_and_type(name, obj):
        print(name, type(obj))
    
    f.visititems(print_name_and_type)  # 访问组和数据集,并显示类型

11. 删除数据集和组

可以使用 Python 的 del 操作符来删除数据集或组。

with h5py.File('example.h5', 'a') as f:
    # 删除数据集
    del f['my_data']

12. 文件模式

在处理 HDF5 文件时,h5py.File() 可以接收不同的模式参数:

  • 'r':只读模式,不能修改文件。
  • 'r+':读写模式,打开文件并进行修改。
  • 'w':写入模式,覆盖现有文件。
  • 'w-''x'

:创建模式,创建一个新文件,如果文件已存在则引发错误。

  • 'a':追加模式,文件存在时打开,文件不存在时创建。

示例:

# 打开文件以追加模式
with h5py.File('example.h5', 'a') as f:
    # 如果存在新数据,可以继续添加数据集或修改已有数据
    new_dset = f.create_dataset('new_data', (50, 50), dtype='f4')
    new_dset[:, :] = np.random.random((50, 50))

总结

h5py 是一个非常强大的库,允许你与 HDF5 格式的数据文件进行灵活的交互。通过掌握创建文件、数据集、压缩、分块、元数据管理以及组的组织结构等常用操作,可以高效地处理大规模科学数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值