理解h5文件并使用python对h5格式文件进行读写操作
(一)HDF與h5
??HDF(Hierarchical Data Format層次數(shù)據(jù)格式)是一種設(shè)計(jì)用于存儲(chǔ)和組織大量數(shù)據(jù)的文件格式,最開始由美國國家超算中心研發(fā),后來由一個(gè)非盈利組織HDF Group支持。HDF支持多種商業(yè)及非商業(yè)的軟件平臺(tái),包括MATLAB、Java、Python、R和Julia等等,現(xiàn)在也提供了Spark。其版本包括了HDF4和現(xiàn)在大量用的HDF5。h5是HDF5文件格式的后綴。h5文件對(duì)于存儲(chǔ)大量數(shù)據(jù)而言擁有極大的優(yōu)勢,這里安利大家多使用h5文件來存儲(chǔ)數(shù)據(jù),既高逼格又高效率。
(二)h5文件數(shù)據(jù)組織方式:像Linux文件系統(tǒng)一樣組織數(shù)據(jù)
?? h5文件中有兩個(gè)核心的概念:組“group”和數(shù)據(jù)集“dataset”。 一個(gè)h5文件就是 “dataset” 和 “group” 二合一的容器。
?? dataset :簡單來講類似數(shù)組組織形式的數(shù)據(jù)集合,像 numpy 數(shù)組一樣工作,一個(gè)dataset即一個(gè)numpy.ndarray。具體的dataset可以是圖像、表格,甚至是pdf文件和excel。
?? group:包含了其它 dataset(數(shù)組) 和 其它 group ,像字典一樣工作。
?? 一個(gè)h5文件被像linux文件系統(tǒng)一樣被組織起來:dataset是文件,group是文件夾,它下面可以包含多個(gè)文件夾(group)和多個(gè)文件(dataset)。
形象來看h5數(shù)據(jù)組織方式大概像醬嬸兒的,諾!跟文件系統(tǒng)一樣,大概知道它為啥叫層次數(shù)據(jù)格式了吧!
(三)使用python對(duì)h5文件進(jìn)行操作
python對(duì)h5文件的操作依賴于h5py包
通過舉個(gè)栗子來介紹h5py包是如何讀寫h5文件的
讀h5文件:
寫h5文件:
# Writing h5import h5py import numpy as np # mode可以是"w",為防止打開一個(gè)已存在的h5文件而清除其數(shù)據(jù),故使用"a"模式 with h5py.File("animals.h5", 'a') as f:f.create_dataset('animals_included',data=np.array(["dogs".encode(),"cats".encode()])) # 根目錄下創(chuàng)建一個(gè)總覽介紹動(dòng)物種類的dataset,字符串應(yīng)當(dāng)字節(jié)化dogs_group = f.create_group("dogs") # 在根目錄下創(chuàng)建gruop文件夾:dogsf.create_dataset('cats',data = np.array(np.random.randn(5,64,64,3))) # 根目錄下有一個(gè)含5張貓圖片的dataset文件dogs_group.create_dataset("husky",data=np.random.randn(64,64,3)) # 在dogs文件夾下分別創(chuàng)建兩個(gè)dataset,一張哈士奇圖片和一張柴犬的圖片dogs_group.create_dataset("shiba",data=np.random.randn(64,64,3))我們來檢查一下這個(gè)animals.h5文件
with h5py.File('animals.h5','r') as f:for fkey in f.keys():print(f[fkey], fkey)print("======= 優(yōu)雅的分割線 =========")'''結(jié)果:<HDF5 dataset "animals_included": shape (2,), type "|S4"> animals_included<HDF5 dataset "cats": shape (5, 64, 64, 3), type "<f8"> cats<HDF5 group "/dogs" (2 members)> dogs'''dogs_group = f["dogs"] # 從上面的結(jié)果可以發(fā)現(xiàn)根目錄/下有個(gè)dogs的group,所以我們來研究一下它for dkey in dogs_group.keys():print(dkey, dogs_group[dkey], dogs_group[dkey].name, dogs_group[dkey].value)'''husky <HDF5 dataset "husky": shape (64, 64, 3), type "<f8"> /dogs/husky [[[ 6.22221467e-01 2.29412386e-01 1.70099600e-01][-9.53310941e-01 -1.65325168e+00 6.50092663e-02][-2.33444396e-01 5.32328485e-01 -1.23046495e+00]...[-8.27186186e-04 -9.54570238e-01 1.20224835e+00][-3.03556381e-01 5.30470941e-01 -1.49928878e-01][ 5.24641964e-01 -1.55304472e+00 1.30016600e+00]]...'''更多騷操作可以參考h5py官方文檔。
參考文獻(xiàn):
[1] h5py官方文檔
[2] HDF官網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的理解h5文件并使用python对h5格式文件进行读写操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 垃圾留言狙击手
- 下一篇: python3爬虫讲座ppt+demo