Append data to hdf5 data
Monte Carlo data can be stored in such a manner:
import h5py
import numpy
f = h5py.File("mytestfile3.hdf5", "a")
L=8
N=3
s=numpy.random.choice(a=[False, True], size=(L,N), p=[0.5,0.5])
dset = f.create_dataset("bigBOOL",data=s,chunks=True,maxshape=(None, 33))
for i in range(10):
dset.resize(dset.shape[1]+N, axis=1)
dset[:,-3:]=s
f.close()
create a file
import h5py
f = h5py.File("mytestfile.hdf5", "a")
print type(f)
f.close()
f 就像是一个指针 一个handler,它是一个object 输出。
<class 'h5py._hl.files.File'>
# 以写入方式打开文件
# r 只读,文件必须已存在
# r+ 读写,文件必须已存在
# w 新建文件,若存在覆盖
# w- 或x,新建文件,若存在报错
# a 如存在则读写,不存在则创建(默认)
groups: create, access, delete
create
import h5py
f = h5py.File("mytestfile.hdf5", "a")
f.create_group("a/a2/b")
f.close()
上面的例子直接构造了多个group, 而且还是嵌套的。同一个group不能再次create,否则会报错。
import h5py
f = h5py.File("mytestfile.hdf5", "a")
f.create_group("a/a2/b") #报错
f.create_group("a/a1/b") #安全,因为有不同的group被构造
f.close()
access
那么问题来了,怎么显示和造作group呢?
下面的方法,就是构造一个类似f的 指针fa
import h5py
f = h5py.File("mytestfile.hdf5", "a")
print f.keys()
fa=f['a']
print type(fa)
print fa.keys()
print type(fa.keys())
f.close()
输出:
[u'a', u'chunked', u'subgroup1']
<class 'h5py._hl.group.Group'>
[u'a', u'a1', u'a2']
<type 'list'>
注意到,fa的类型和f的类型是一样的。
另外 fa.key() 是一个python的list类型。
delete
稍后再说
dataset
创建
import h5py
import numpy as np
f = h5py.File("mytestfile.hdf5", "a")
dset = f.create_dataset("default1", (100,),dtype='i8')
f.close()
使用
import h5py
import numpy as np
f = h5py.File("mytestfile.hdf5", "a")
d=f['a1/b3']["why2"]
d[3]=666
print d[3]
type(d)
f.close()
d 的类型是 <Closed HDF5 dataset>
attribute
import h5py
import numpy as np
f = h5py.File("mytestfile22.hdf5", "a")
dset = f.create_dataset("default1", (100,),dtype='i8')
dset.attrs['temperature'] = 99.5
f.close()
资料来源:
上面这个攻略是我见过写的最好的一个。
官方的说明书: