h5文件格式,HDF 的版本 5(HDF 版本 5不与 HDF 版本 4 及早期版本兼容).HDF是什么呢?就是Hierarchical Data Format,可以存储不同类型的图像和数码数据的文件格式,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库。大多数普通计算机都支持这种文件格式。
美国国家高级计算应用中心(National Center for Supercomputing Application,NCSA)为了满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式 。HDF可以表示出科学数据存储和分布的许多必要条件。

HDF的优点有:

  自述性:对于一个HDF文件里的每一个数据对象,有关于该数据的综合信息(元数据)。在没有任何外部信息的情况下,HDF允许应用程序解释HDF文件的结构和内容。
  通用性:许多数据类型都可以被嵌入在一个HDF文件里。例如,通过使用合适的HDF数据结构,符号、数字和图形数据可以同时存储在一个HDF文件里。
  灵活性:HDF允许用户把相关的数据对象组合在一起,放到一个分层结构中,向数据对象添加描述和标签。它还允许用户把科学数据放到多个HDF文件里。
  扩展性:HDF极易容纳将来新增加的数据模式,容易与其他标准格式兼容。
  跨平台性:HDF是一个与平台无关的文件格式。HDF文件无需任何转换就可以在不同平台上使用。
 

HDF的文件格式:

  HDF格式可以被看成一本带目录的多章节书。HDF文件作为“数据书”,每一章包含不同类型的数据元素。HDF文件用“数据目录”列出数据元素。
一个HDF 文件应包括一个文件头,一个或多个描述符块,若干个数据元素。
数据头是用来确定一个文件是否为HDF文件,描述符块存有数据描述符的序号。一个数据描述符和数据元素一起组成了数据对象。数据对象是HDF 的基本结构。

文件头:

文件头占用文件的前4个字节,它由4个ASCII码形式的控制字符组成,每个字符占用一个字节。第一个控制字符是‘N’,第二个是‘C’, 第三个是‘S’,第四为‘A’,即(^N^C^S^A).

数据对象:

  一个数据对象是由一个数据描述符和一个数据元素组成。数据描述符包含了数据元素的类型、位置、尺度等信息。数据元素是实际的数据资料。HDF 这种数据组织方式可以实现HDF 数据的自我描述。
(1) 数据描述符
所有的数据描述符都为12个字节长,它包含4个区域:标识符(占16-bit),参照数(16-bit),数据偏移量(32-bit),数据长度(32-bit)。
标识符:
数据标识符(tag)是用来确定数据元素区数据类型的。它是16位无符号整型值(1~65535),如果没有与其相对应的数据元素,则tag为DFTGA_NULL(或0)。下面为tag的值的说明:
1~32767——HDF 结构专用
32768~64999——可由用户定义
65000~65535——HDF 规格扩展使用
参照数:
对于HDF 文件中的每个标记符,都有唯一的一个参照数与其相对应。参照数是一个16—bit无符号整型数,在数据对象中一般是不可变的。标记符和参照数相结合确定唯一的数据对象。
数据偏移量和长度:
数据偏移量是指从文件开始位置到数据元素的起始位置所包含的字节数。长度是指整个数据元素区占用字节数。数据偏移量和长度均为32-bit 无符号整型数。
(2) 数据元素
数据元素是数据对象中的裸数据部分。
(3) 在HDF 文件中将数据对象分组
在HDF 文件中通常将含有相关数据的数据对象分为一组。这些数据对象组称为数据集。HDF 用户采用应用界面来处理这些数据集。例如:一套8-bit的图像数据集一般有3个数据对象:一组对象用来描述数据集的成员,一组对象是图像数据,另一组对象则用来描述图像的尺度大小。一个数据对象可以同时属于多个数据集,例如包含在一个栅格图像中的调色板对象,如果它的标识号和参照值也同时包含在另一个数据集描述符中,那么则可以被另一个栅格图像调用。
 
python的代码读写实现:
# -*- coding: utf-8 -*-

import h5py
import numpy as np #HDF5的写入:
imgData = np.zeros((2,4))
f = h5py.File('HDF5_FILE.h5','w') #创建一个h5文件,文件指针是f
f['data'] = imgData #将数据写入文件的主键data下面
f['labels'] = np.array([1,2,3,4,5]) #将数据写入文件的主键labels下面
f.close() #关闭文件 #HDF5的读取:
f = h5py.File('HDF5_FILE.h5','r') #打开h5文件
# 可以查看所有的主键
for key in f.keys():
print(f[key].name)
print(f[key].shape)
print(f[key].value)

备忘:

错误: ImportError: No module named h5py的解决方法:

sudo apt-get install libhdf5-dev

sudo apt-get install python-h5py

参考文档:

1 https://baike.baidu.com/item/hdf%E6%96%87%E4%BB%B6/2590190

hdf 5文件格式及python中利用h5py模块读写h5文件的更多相关文章

  1. python:利用configparser模块读写配置文件

    在自动化测试过程中,为了提高脚本的可读性和降低维护成本,将一些通用信息写入配置文件,将重复使用的方法写成公共模块进行封装,使用时候直接调用即可. 这篇博客,介绍下python中利用configpars ...

  2. Python中使用dom模块生成XML文件示例

    在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件. 在生成XML文件中,我们主 ...

  3. Python中xml.etree.ElementTree读写xml文件实例

    import osimport xml.etree.ElementTree as ET'''Python 标准库中,提供了6种可以用于处理XML的包,本文举实例说明第6种1.xml.dom2.xml. ...

  4. python中的shutil模块

    目录 python中的shutil模块 目录和文件操作 归档操作 python中的shutil模块 shutil模块对文件和文件集合提供了许多高级操作,特别是提供了支持文件复制和删除的函数. 目录和文 ...

  5. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  6. python中利用matplotlib绘图可视化知识归纳

    python中利用matplotlib绘图可视化知识归纳: (1)matplotlib图标正常显示中文 import matplotlib.pyplot as plt plt.rcParams['fo ...

  7. 善于利用python中的os模块

    作为一个程序猿,平时善于利用python中的os模块进行路径等操作,会省去很多麻烦,下面总结一下我平时经常用到的方法: import os os.getcwd() # 获取当前文件所在的目录 os.p ...

  8. Python中利用原始套接字进行网络编程的示例

    Python中利用原始套接字进行网络编程的示例 在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构 ...

  9. python中利用队列asyncio.Queue进行通讯详解

    python中利用队列asyncio.Queue进行通讯详解 本文主要给大家介绍了关于python用队列asyncio.Queue通讯的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细 ...

随机推荐

  1. 20172306 2018-2019-2 《Java程序设计与数据结构》第八周学习总结

    20172306 2018-2019-2 <Java程序设计与数据结构>第八周学习总结 教材学习内容总结 堆 堆是具有两个附加属性的一棵二叉树 它是一个完全树 对每一结点,它小于或等于其左 ...

  2. Python第十六天 类的实例化

    首先 , 先定义一个 简单的 Person 类 class Person: head = 1 ear = 2 def eat(self): print('吃饭') 关于什么是类, 定义类, 类对象,类 ...

  3. svn2个小问题的解决

    Revision file (r615) lacks trailing newline /svndata/your_project/db/revs /svndata/your_project/db/r ...

  4. linux性能监控(转)

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...

  5. 前端面试题---vue部分

    1.vue的两大核心思想 组件化和数据驱动 2.如何理解vue中的MVVM模式 Model-View-ViewModel(简称为mvvm)是一种设计思想,model层代表数据模型,也可以再model中 ...

  6. 你了解栈溢出StackOverFloweExeption的原理吗?

    StackOverflowException的常见几种引起的方式 1.类的相互引用 2.方法的循环调用 3.属性Set方法的死循环调用 class Program : IProgram { IPers ...

  7. 实现PHP服务端和c#客户端数据交换

    服务端实现功能1,数据库的访问dbhelper.php包括执行语句返回多行,返回json数据,返回单条记录,返回第一行第一列的整数,返回第一行第一列的浮点数,返回第一行第一列的双精度数,返回第一行第一 ...

  8. 第46章:MongoDB-监控应用状态

    ① MongoDB监控  1 db.serverStatus() 查看实例运行状态(内存使用.锁.用户连接等信息) 通过比对前后快照进行性能分析 "connections" # 当 ...

  9. Runnable和Callable 的区别

    Runnable和Callable 的区别 01.Runnable接口中只有一个run()没有返回值 没有声明异常   Callable接口中只有一个call()有返回值 有声明异常 02.Calla ...

  10. Machine learning | 机器学习中的范数正则化

    目录 1. \(l_0\)范数和\(l_1\)范数 2. \(l_2\)范数 3. 核范数(nuclear norm) 参考文献 使用正则化有两大目标: 抑制过拟合: 将先验知识融入学习过程,比如稀疏 ...