h5py檔案是存放兩類物件的容器,資料集(dataset)和組(group),dataset類似陣列類的資料集合,和numpy的陣列差不多。group是像資料夾一樣的容器,它好比python中的字典,有鍵(key)和值(value)。group中可以存放dataset或者其他的group。」鍵」就是組成員的名稱,」值」就是組成員物件本身(組或者資料集),下面來看下如何建立組和資料集。
1. 建立乙個h5py檔案
import h5py
#要是讀取檔案的話,就把w換成r
f=h5py.file("myh5py.hdf5","w")
在當前目錄下會生成乙個myh5py.hdf5檔案
2. 建立dataset資料集
import h5py
f=h5py.file("myh5py.hdf5","w")
#deset1是資料集的name,(20,)代表資料集的shape,i代表的是資料集的元素型別
d1=f.create_dataset("dset1", (20,), 'i')
for key in f.keys():
print(key)
print(f[key].name)
print(f[key].shape)
print(f[key].value)
輸出:dset1
/dset1
(20,)[00
0000
0000
0000
0000
00]
這裡我們僅僅建立了乙個存放20個整型元素的資料集,並沒有賦值,預設全是0,如何賦值呢,看下面的**。
import h5py
import numpy as np
f=h5py.file("myh5py.hdf5","w")
d1=f.create_dataset("dset1",(20,),'i')
#賦值d1[...]=np.arange(20)
#或者我們可以直接按照下面的方式建立資料集並賦值
f["dset2"]=np.arange(15)
for key in f.keys():
print(f[key].name)
print(f[key].value)
輸出:/dset1
[ 0123
4567
891011
1213
1415
1617
1819]
/dset2
[ 0123
4567
891011
1213
14]
如果我們有現成的numpy陣列,那麼可以在建立資料集的時候就賦值,這個時候就不必指定資料的型別和形狀了,只需要把陣列名傳給引數data。
import h5py
import numpy as np
f=h5py.file("myh5py.hdf5","w")
a=np.arange(20)
d1=f.create_dataset("dset1",data=a)
for key in f.keys():
print(f[key].name)
print(f[key].value)
輸出:/dset1
[ 0123
4567
891011
1213
1415
1617
1819]
現在把這幾種建立的方式混合寫下。看下面的**
import h5py
import numpy as np
f=h5py.file("myh5py.hdf5","w")
#分別建立dset1,dset2,dset3這三個資料集
a=np.arange(20)
d1=f.create_dataset("dset1",data=a)
d2=f.create_dataset("dset2",(3,4),'i')
d2[...]=np.arange(12).reshape((3,4))
f["dset3"]=np.arange(15)
for key in f.keys():
print(f[key].name)
print(f[key].value)
輸出:/dset1
[ 0123
4567
891011
1213
1415
1617
1819]
/dset2
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
/dset3
[ 0123
4567
8910
import h5py
import numpy as np
f=h5py.file("myh5py.hdf5","w")
#建立乙個名字為bar的組
g1=f.create_group("bar")
#在bar這個組裡面分別建立name為dset1,dset2的資料集並賦值。
g1["dset1"]=np.arange(10)
g1["dset2"]=np.arange(12).reshape((3,4))
for key in g1.keys():
print(g1[key].name)
print(g1[key].value)
輸出:/bar/dset1[01
2345
6789]
/bar/dset2
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
注意觀察資料集dset1和dset2的名字是不是有點和前面的不一樣,如果是直接建立的資料集,不在任何組裡面,那麼它的名字就是/+名字,現在這兩個資料集都在bar這個group(組)裡面,名字就變成了/bar+/名字,是不是有點資料夾的感覺!繼續看下面的**,你會對group和dataset的關係進一步了解。
import h5py
import numpy as np
f=h5py.file("myh5py.hdf5","w")
#建立組bar1,組bar2,資料集dset
g1=f.create_group("bar1")
g2=f.create_group("bar2")
d=f.create_dataset("dset",data=np.arange(10))
#在bar1組裡面建立乙個組car1和乙個資料集dset1。
c1=g1.create_group("car1")
d1=g1.create_dataset("dset1",data=np.arange(10))
#在bar2組裡面建立乙個組car2和乙個資料集dset2
c2=g2.create_group("car2")
d2=g2.create_dataset("dset2",data=np.arange(10))
#根目錄下的組和資料集
print(".............")
for key in f.keys():
print(f[key].name)
#bar1這個組下面的組和資料集
print(".............")
for key in g1.keys():
print(g1[key].name)
#bar2這個組下面的組和資料集
print(".............")
for key in g2.keys():
print(g2[key].name)
#順便看下car1組和car2組下面都有什麼,估計你都猜到了為空。
print(".............")
print(c1.keys())
print(c2.keys())
輸出:.............
/bar1
/bar2
/dset
.............
/bar1/car1
/bar1/dset1
.............
/bar2/car2
/bar2/dset2
.............
python庫 h5py入門講解
h5py檔案是存放兩類物件的容器,資料集 dataset 和組 group dataset類似陣列類的資料集合,和numpy的陣列差不多。group是像資料夾一樣的容器,它好比python中的字典,有鍵 key 和值 value group中可以存放dataset或者其他的group。鍵 就是組成員...
python中利用h5py模組讀取h5檔案中的主鍵
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.arr...
h5py 必知 String儲存
1.h5py 檔案介紹 乙個h5py檔案是 dataset 和 group 二合一的容器。1.dataset 類似陣列組織的資料的集合,像 numpy 陣列一樣工作 2.group 包含了其它 dataset 和 其它 group 像字典一樣工作 看下圖 通過上圖,我們可以知道 h5py 檔案就像是...