HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件。HDF 最早由美国国家超级计算应用中心 NCSA 开发,目前在非盈利组织 HDF 小组维护下继续发展。当前流行的版本是 HDF5。HDF5 拥有一系列的优异特性,使其特别适合进行大量科学数据的存储和操作,如它支持非常多的数据类型,灵活,通用,跨平台,可扩展,高效的 I/O 性能,支持几乎无限量(高达 EB)的单文件存储等。

HDF5文件层次化的存储两类对象:

  • dataset:数据集,一个数据集就是一个数组。数据集就是叶子节点,是文件结点。
  • group:目录,一个group可以包含若干个key-value,其中key是字符串,value是dataset。

这两类对象都可以设置各种属性,属性用于描述group和dataset的一些特点。一个HDF5文件从一个命名为“/”的group开始,一个HDF5文件只有一个根group。

用 h5py 操作 HDF5 文件,我们可以像使用目录一样使用 group,像使用 numpy 数组一样使用 dataset,像使用字典一样使用属性,非常方便和易用。

打开/创建

class File(name, mode=None, driver=None, libver=None, userblock_size=None, **kwds)

打开或创建一个 HDF5 文件,name 为文件名字符串,mode 为打开文件的模式,driver 可以指定一种驱动方式,如需进行并行 HDF5 操作,可设置为 'mpio',libver 可以指定使用的兼容版本,默认为 'earliest',也可以指定为 'latest',userblock_size 以字节为单位指定一个在文件开头称作 user block 的数据块,一般不需要设置。返回所打开文件的句柄。

mode 说明
r 只读,文件必须存在
r+ 读写,文件必须存在
w 创建新文件写,已经存在的文件会被覆盖掉
w- / x 创建新文件写,文件如果已经存在则出错
a 打开已经存在的文件进行读写,如果不存在则创建一个新文件读写,此为默认的 mode

创建group

create_group(self, name, track_order=False)

创建一个新的 group。以类似目录路径的形式指明所创建 group 的名字 name,如果 track_order 为 True,则会跟踪在当前 group 下的 group 和 dataset 创建的先后顺序。该方法可以在打开的文件句柄(相当于 "/" group)或者一个存在的 group 对象上调用,此时 name 的相对路径就是相对于此 group 的。

创建dataset

create_dataset(self, name, shape=None, dtype=None, data=None, **kwds)

创建一个新的 dataset。以类似文件路径的形式指明所创建 dataset 的名字 name,shape 以一个 tuple 或 list 的形式指明创建 dataset 的 shape,用 "()" 指明标量数据的 shape,dtype 指明所创建 dataset 的数据类型,可以为 numpy dtype 或者一个表明数据类型的字符串,data 指明存储到所创建的 dataset 中的数据。如果 data 为 None,则会创建一个空的 dataset,此时 shape 和 dtype 必须设置;如果 data 不为 None,则 shape 和 dtype 可以不设置而使用 data 的 shape 和 dtype,但是如果设置的话,必须与 data 的 shape 和 dtype 兼容。

添加attribute

打开的文件句柄(相当于 "/" group),group 和 dataset 上都可以创建 attribute,以类似于字典的操作方式创建和读取 attribute。

示例代码一:

import h5py
import numpy as npX = np.random.rand(1, 10, 4).astype('float32')
y = np.random.rand(1, 10, 5).astype('float32')h5f = h5py.File('data.h5', 'w')  # 以写模式打开文件
h5f.create_dataset('X_train', data=X)  # 添加数据集
h5f.create_dataset('y_train', data=y)  # 添加数据集
h5f.close()h5f = h5py.File('data.h5', 'r')  # 以读模式打开文件
X = h5f['X_train']  # 通过下标方式获取数据集
Y = h5f['y_train']
h5f.close()

示例代码二:

import osimport h5py
import numpy as npfile_name = 'test.hdf5'
# create a new HDF5 file
f = h5py.File(file_name)
# create a new group
f.create_group('/grp1')  # or f.create_group('grp1')
# create a nother group inside grp1
f.create_group('/grp1/grp2')  # or f.create_group('grp1/grp2')
# create a dataset in group "/"
data = np.arange(6).reshape(2, 3)
f.create_dataset('dset1', data=data)  # or f.create_dataset('/dset1', data=data)
# create another dataset in group /grp1
f.create_dataset('grp1/dset2', data=data)  # or f.create_dataset('/grp1/dset2', data=data)
# create an attribute of "/"
f.attrs['a'] = 1  # or f.attrs['/a'] = 1
# create an attribute of group "/grp1"
f['grp1'].attrs['b'] = 'xyz'
# create an attribute of dataset "/grp1/dset2"
f['grp1/dset2'].attrs['c'] = np.array([1, 2])
# close file
f.close()# open the existing test.hdf5 for read only
f = h5py.File(file_name, 'r')
# read dataset /dset1
print('/dset1 = %s' % f['dset1'][:])
# read dataset /grp1/dset2
print('/grp1/dset2 = %s' % f['/grp1/dset2'][:])
# get attributes
print(f.attrs['a'])
print(f['grp1'].attrs['b'])
print(f['grp1/dset2'].attrs['c'])# remove the created file
os.remove(file_name)

示例代码三:

import h5py
import numpy as npfile_name = 'test.hdf5'
f = h5py.File(file_name, mode='w')
data = np.array([1, 2, 3])
f['/one'] = data
f.attrs['one'] = 'haha'
print(f.attrs.keys())
print(f['one'])
print(f.attrs['one'])

参考资料

http://docs.h5py.org/en/stable/quick.html

http://www.h5py.org/

https://www.jianshu.com/p/de9f33cdfba0

转载于:https://www.cnblogs.com/weiyinfu/p/10740653.html

使用h5py操作hdf5文件相关推荐

  1. python怎么打开h5文件_Python 操作 HDF5文件

    在Matlab操作HDF5文件中已经详细介绍了HDF5文件已经利用Matlab对其进行操作的方法.这篇文章总结一下如何在Python下使用HDF5文件.我们仍然按照Matlab操作HDF5文件的顺序进 ...

  2. matlab查看hdf5数据,Matlab 操作 HDF5文件

    HDF5文件 在使用Matlab对数据进行预处理时,遇到了内存不足的问题,因为数据量太大,在处理完成以前内存已经爆满.如果使用Matlab的.m文件对文件进行存储的话,则需要将数据分割成多个文件,对后 ...

  3. Python处理HDF5文件:h5py库

    h5py官方文档 简介   HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件.最早由美国国家超级计算应用中心 NCSA 研究开发,目 ...

  4. 利用pandas读写HDF5文件

    一.简介 HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式,文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一个H ...

  5. 如何生成HDF5文件

    在使用深度学习学习图像文件的时候,如果图片文件很多,比如大几千张,或者几万张.如果将一个图片再接一个图片导入到内存中,会极大地拖慢深度学习算法运行速度.我们都有过这样的经验,如果将一个文件夹里面有几万 ...

  6. 《Python和HDF 5大数据应用》——2.4 你的第一个HDF5文件

    本节书摘来自异步社区<Python和HDF 5大数据应用>一书中的第2章,第2.4节,作者[美]Andrew Collette(科莱特),胡世杰 译,更多章节内容可以访问云栖社区" ...

  7. Python操作HDF5存储数据方法总结

    写在前面 HDF是什么 可视化工具 Pandas内置HDF文件操作 踩坑记录 参考文献 后记 写在前面   最近在做股价预测有关项目,需要大量股票数据,然而手头的CSV格式的数据对硬盘的占用越来越大, ...

  8. python读取hdf5文件_科学网—python读hdf5文件 - 钱磊的博文

    读hdf5文件和读fits差不多,需要知道类似文件头的东西,这里是一个变量的名称.这可以通过定义一个prt函数结合h5py报的工具来实现如下 def prt(name): print(name) fi ...

  9. html显示hdf5文件,图片转换成HDF5文件(加载,保存)

    翻译http://machinelearninguru.com/deep_learning/data_preparation/hdf5/hdf5.html 当我们谈论深度学习时,通常首先想到的是大量数 ...

最新文章

  1. RoadFlow工作流引擎安装与部署
  2. 用神经网络二分类吸引子与排斥子
  3. 【我的区块链之路】- Hyperledger fabric的简单入门(四)链码的编写及调试
  4. 深入浅出springboot 下载_有没有相见恨晚的学习模电好方法?《新概念模拟电路》全五册合集免费下载...
  5. 标准成本、目标成本、实际成本
  6. TCP/IP学习笔记(六)Nagle算法
  7. logback 的过滤器和异步日志和自定义 logger
  8. hutool 读取扩展名文件_JPG,PNG,GIF,TIFF、SVG玩设计必须了解的文件格式你知道几个?...
  9. sql加上唯一索引后批量插入_MySQL当批量插入遇上唯一索引
  10. [转载] python怎么将十进制转换为二进制_python十进制和二进制的转换方法(含浮点数)
  11. Kaggle/Titanic python分析和建模
  12. mysql能将查询结果与表左查询,MySQL查询与结构
  13. 微信平台自动获取Token
  14. 世界杯为战斗民族的历史再添荣耀与光辉_数字体验_新浪博客
  15. 安卓开发:记事本App
  16. 计算机上瘾英语对话,对手机上瘾的英语作文(精选5篇)
  17. 5 个免费的受欢迎的 SQLite 管理工具
  18. C/S构架和B/S构架
  19. JAVA 实现《飞机大战-II》游戏
  20. JavaFX8开发过程中的问题记录

热门文章

  1. SICP习题解答2.22
  2. Extjs 判断对象是非为null或者为空字符串
  3. 旅游规划(双权连通图)
  4. 输入框中提示信息(html5)
  5. Input.GetAxis(Mouse ScrollWheel)控制摄像机视野缩放
  6. ATL的GUI程序设计(2)
  7. pat1045. Favorite Color Stripe (30)
  8. mac 安装memcached服务
  9. eclipse git插件简单使用
  10. 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题