hdf5⽂件格式及python中利⽤h5py模块读写h5⽂件
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():
python怎么读取py文件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
参考⽂档:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论