HDF5文件--python 使用简介

引:在使用TensorFlow,学习回调函数时,使用了ModelCheckpoint(),产生了.h5的文件。为了了解回调函数产生的信息,需要了解HDF5的相关内容,以及在python中的使用与相关问题解决。
文中一些叙述为了方便初次接触者理解,表述并不严谨,仅供简单参考。


初次见面

HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式,文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一个HDF5可以看做一个高度整合的文件夹,其内部可存放不同类型的数据。

在Python中操纵HDF5文件的方式主要有两种

  • 是利用pandas中内建的一系列HDF5文件操作相关的方法,来完成相关操作。
  • 二是利用h5py模块来完成Python原生数据结构与HDF5格式的转化

本篇主要介绍hdf5的基础内容和对应模块使用的快速入门。

初遇时的差池

一段小插曲
HDF是HDF(Hierarchical Data File)是美国国家高级计算应用中心(National Center for Supercomputing Application,NCSA)为了满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式 。阅读的文档中提到了到国家卫星气象中心(NSMC)曾经发布过一份《HDF5.0 使用简介》,抱着些许迷信权威的心态阅读后发现它涉及的信息就我目前来说价值不大,其中主要有讲HDF5文件的组织,API,创建,数据集数据空间,组群,属性等等,内容大而全,但似乎这篇教材发布的相对较早,所以产生了一定的局限性并且内部的相关URL都失效了,它本身也在国家卫星气象中心的官网上没有什么存在的痕迹。相关的API只涉及了C和FORTRAN的外壳包装函数。对于像我这样在使用python且第一次接触HDF5的使用者并不友好,索性只读了开头的基础内容并建立了更详细的认知后就放弃了继续阅读的打算。

相识

首先从hdf5文件讲起。

HDF5文件具有两类存储对象,dataset和group。dataset是类似于数组的数据集,而group是类似文件夹一样的容器,存放dataset和其他group。

HDF本意即是层次数据格式,所以就其存储结构来说是类似与POSIX风格的。其实现的方式就是group。每层都用’/'分隔。我们创建的file object其实也可以看作一个group,是一个root group,其余的groups可以称为subgroups。

dataset与numpy中的array相似,比如都具有shape、dtype、以及一些切片操作等。虽然与Numpy的数组在接口上很相近,但是支持更多对外透明的存储特征,如数据压缩,误差检测,分块传输。

HDF5的一个很好的features就是可以在数据旁边存储元数据1。所有的group和dataset都支持叫做属性的数据形式。

h5py

想到python一定有对应的文件解析库,于是我开始了h5py的“快速”入门。

import h5py
# 读取
file = h5py.File('test.hdf5', 'r')# .hdf5与.h5意义相同
# 一下也可以完成读取
with h5py.File("mytestfile.hdf5", "w") as f:
	

# 我们需要注意的是group(包括File对象)与python中的字典相似
# 通过该方法可以获得对应group下的subgroups或datasets,返回包含字符串的列表
f.keys()

# 此时我们假设存在一个名为DataSet的dataset对象
# 利用对应键来索引值的方法可以获取该对象
dest = f['DataSet']

# dataset对象满足我们平时使用的numpy数组的一些操作,如下:
dest.shape
dest.dtype
dest[:]


# 创建HDF5文件
f = h5py.File('test.h5', 'w')

# 使用create_dataset创建给定形状和数据类型的空dataset
dataset = f.
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值