python 桌面应用 h5_hdf 5文件格式及python中利用h5py模块读写h5文件
HDF格式可以被看成一本帶目錄的多章節(jié)書。HDF文件作為“數(shù)據(jù)書”,每一章包含不同類型的數(shù)據(jù)元素。HDF文件用“數(shù)據(jù)目錄”列出數(shù)據(jù)元素。
一個(gè)HDF 文件應(yīng)包括一個(gè)文件頭,一個(gè)或多個(gè)描述符塊,若干個(gè)數(shù)據(jù)元素。
數(shù)據(jù)頭是用來確定一個(gè)文件是否為HDF文件,描述符塊存有數(shù)據(jù)描述符的序號。一個(gè)數(shù)據(jù)描述符和數(shù)據(jù)元素一起組成了數(shù)據(jù)對象。數(shù)據(jù)對象是HDF 的基本結(jié)構(gòu)。
文件頭:
文件頭占用文件的前4個(gè)字節(jié),它由4個(gè)ASCII碼形式的控制字符組成,每個(gè)字符占用一個(gè)字節(jié)。第一個(gè)控制字符是‘N’,第二個(gè)是‘C’, 第三個(gè)是‘S’,第四為‘A’,即(^N^C^S^A).
數(shù)據(jù)對象:
一個(gè)數(shù)據(jù)對象是由一個(gè)數(shù)據(jù)描述符和一個(gè)數(shù)據(jù)元素組成。數(shù)據(jù)描述符包含了數(shù)據(jù)元素的類型、位置、尺度等信息。數(shù)據(jù)元素是實(shí)際的數(shù)據(jù)資料。HDF 這種數(shù)據(jù)組織方式可以實(shí)現(xiàn)HDF 數(shù)據(jù)的自我描述。
(1) 數(shù)據(jù)描述符
所有的數(shù)據(jù)描述符都為12個(gè)字節(jié)長,它包含4個(gè)區(qū)域:標(biāo)識(shí)符(占16-bit),參照數(shù)(16-bit),數(shù)據(jù)偏移量(32-bit),數(shù)據(jù)長度(32-bit)。
標(biāo)識(shí)符:
數(shù)據(jù)標(biāo)識(shí)符(tag)是用來確定數(shù)據(jù)元素區(qū)數(shù)據(jù)類型的。它是16位無符號整型值(1~65535),如果沒有與其相對應(yīng)的數(shù)據(jù)元素,則tag為DFTGA_NULL(或0)。下面為tag的值的說明:
1~32767——HDF 結(jié)構(gòu)專用
32768~64999——可由用戶定義
65000~65535——HDF 規(guī)格擴(kuò)展使用
參照數(shù):
對于HDF 文件中的每個(gè)標(biāo)記符,都有唯一的一個(gè)參照數(shù)與其相對應(yīng)。參照數(shù)是一個(gè)16—bit無符號整型數(shù),在數(shù)據(jù)對象中一般是不可變的。標(biāo)記符和參照數(shù)相結(jié)合確定唯一的數(shù)據(jù)對象。
數(shù)據(jù)偏移量和長度:
數(shù)據(jù)偏移量是指從文件開始位置到數(shù)據(jù)元素的起始位置所包含的字節(jié)數(shù)。長度是指整個(gè)數(shù)據(jù)元素區(qū)占用字節(jié)數(shù)。數(shù)據(jù)偏移量和長度均為32-bit 無符號整型數(shù)。
(2) 數(shù)據(jù)元素
數(shù)據(jù)元素是數(shù)據(jù)對象中的裸數(shù)據(jù)部分。
(3) 在HDF 文件中將數(shù)據(jù)對象分組
在HDF 文件中通常將含有相關(guān)數(shù)據(jù)的數(shù)據(jù)對象分為一組。這些數(shù)據(jù)對象組稱為數(shù)據(jù)集。HDF 用戶采用應(yīng)用界面來處理這些數(shù)據(jù)集。例如:一套8-bit的圖像數(shù)據(jù)集一般有3個(gè)數(shù)據(jù)對象:一組對象用來描述數(shù)據(jù)集的成員,一組對象是圖像數(shù)據(jù),另一組對象則用來描述圖像的尺度大小。一個(gè)數(shù)據(jù)對象可以同時(shí)屬于多個(gè)數(shù)據(jù)集,例如包含在一個(gè)柵格圖像中的調(diào)色板對象,如果它的標(biāo)識(shí)號和參照值也同時(shí)包含在另一個(gè)數(shù)據(jù)集描述符中,那么則可以被另一個(gè)柵格圖像調(diào)用。
python的代碼讀寫實(shí)現(xiàn):
#-*- coding: utf-8 -*-
importh5pyimportnumpy as np#HDF5的寫入:
imgData = np.zeros((2,4))
f= h5py.File('HDF5_FILE.h5','w') #創(chuàng)建一個(gè)h5文件,文件指針是f
f['data'] = imgData #將數(shù)據(jù)寫入文件的主鍵data下面
f['labels'] = np.array([1,2,3,4,5]) #將數(shù)據(jù)寫入文件的主鍵labels下面
f.close() #關(guān)閉文件
#HDF5的讀取:
f = h5py.File('HDF5_FILE.h5','r') #打開h5文件#可以查看所有的主鍵
for key inf.keys():print(f[key].name)print(f[key].shape)print(f[key].value)
總結(jié)
以上是生活随笔為你收集整理的python 桌面应用 h5_hdf 5文件格式及python中利用h5py模块读写h5文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次Exception in thre
- 下一篇: 电路基础第5版读书笔记(第一章基本概念)