python HDF5初探

1. HDF5简介

Hierarchical Data Format(分层数据结构)是一种对大量数据进性组织和存储的文件格式。经历了20多年的发展,HDF格式的最新版本为HDF5,HDF5包含了数据模型文件格式标准

特点:便捷有效,移植性强,灵活可扩展
 

一定要在操作结束之后关闭对象。因为之前的操作只是操作的流程,并不是真正执行操作,只有真正关闭对象才是真正发出对对象进行的修改。

HDF5文件结构:

HDF5文件格式:

HDF5结构模型:

每一个dataset包含两部分的数据,MetadataData。其中,Metadata包含Data的相关信息,而Data则包含数据本身。

内置数据类型

C类型       HDF5内存类型HDF5文件类型1
Integer :  
intH5T_NATIVE_INTH5T_STD_I32BE or H5T_STD_I32LE
shortH5T_NATIVE_SHORTH5T_STD_I16BE or H5T_STD_I16LE
longH5T_NATIVE_LONGH5T_STD_I32BE, H5T_STD_I32LE, H5T_STD_I64BE or H5T_STD_I64LE
long longH5T_NATIVE_LLONGH5T_STD_I64BE or H5T_STD_I64LE
unsigned intH5T_NATIVE_UINTH5T_STD_U32BE or H5T_STD_U32LE
unsigned shortH5T_NATIVE_USHORTH5T_STD_U16BE or H5T_STD_U16LE
unsigned longH5T_NATIVE_ULONGH5T_STD_U32BE, H5T_STD_U32LE, H5T_STD_U64BE or H5T_STD_U64LE
unsigned long longH5T_NATIVE_ULLONGH5T_STD_U64BE or H5T_STD_U64LE
Float :  
floatH5T_NATIVE_FLOATH5T_IEEE_F32BE or H5T_IEEE_F32LE
doubleH5T_NATIVE_DOUBLEH5T_IEEE_F64BE or H5T_IEEE_F64LE

4 开始干HDF5:

一般操作一个HDF5对象的步骤:

  1. 打开这个对象
  2. 对这个对象进行操作
  3. 关闭这个对象

4.1 文件创建,打开和关闭

import h5py
# 以写入方式打开文件
# r 只读,文件必须已存在
# r+ 读写,文件必须已存在
# w 新建文件,若存在则覆盖
# w- or x 新建文件,若存在则报错
# a 若存在则读写,若不存在则创建(默认)
file = h5py.File('file.h5', 'w')
file.close()

4.2 Group (群)的建立

Python中将文件树表述成一个dict,keys值是groups成员的名字,values是成员对象(groups或者是datasets)本身。

文件对象本身作为root group.

import h5py
f = h5py.File('foo.hdf5', 'w')
f.name                    # output = '/'
[k for k in f.keys()]     # output = []

创建一个group
# 1. 相对地址方法
grp = f.create_group('bar')
grp.name
subgrp = grp.create_group('baz')
subgrp.name

# 2. 绝对地址创建多个group
grp2 = f.create_group('/some/long/path')
grp2.name                 # output = '/some/long/path'
grp3 = f['/some/long']
grp3.name                 # output = '/some/long'

# 3. 删除一个group
del f['bar']              
# 最终一定记得关闭文件才能保存
f.close()

4.3 Dataset(数据集)的建立

H5py中的dataset很类似于Numpy中的array,但支持一些列透明(针对连续存储的选择操作对分块存储同样有效)的存储特性,还支持分块,压缩和错误校验。

新的数据集可以通过:

  • group.create_dataset() 
  • group.require_dataset()记忆性创建

已经存在的数据可以通过群访问:

  • dset = group['dset_name']
import h5py
import numpy as np
f = h5py.File('file.h5', 'w')

# 创建数据集
dataset = group_create_dataset(name,
                               shape = None,
                               dtype = None,
                               data = None)

dset = f.create_dataset('default', (100,))
dset = f.create_dataset('ints', (100,), dtype = 'i8')
dset = f.create_dataset('init', data = np.arange(100))

# 读取数据集可以采用索引操作
read_dset = f['default']


# 数据集的删除。注意这样做只能是删除链接,但文件中所申请的空间是无法收回的
f.__delitem__('inits')  # version1
del f['init']           # version2

f.close()

4.4 数据集读取与子集索引(subsetting)

h5py采用numpy的切片语法来读写文件中的数据集。以下是能够被识别的用法:

  • 索引
  • 切片(比如:[:]or[0:10])
  • 域名,在符合数据中使用
  • 最多一个省略(Ellipsis),即(...),对象

 

本文中,使用h5py模块来使用HDF5

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值