h5py

import sys
import h5py
import numpy as np

def save_h5(times=0):
if times == 0:
h5f = h5py.File('data.h5', 'w')
dataset = h5f.create_dataset("data", (100, 1000, 1000),
maxshape=(None, 1000, 1000),
# chunks=(1, 1000, 1000),
dtype='float32')
else:
h5f = h5py.File('data.h5', 'a')
dataset = h5f['data']
# 关键:这里的h5f与dataset并不包含真正的数据,
# 只是包含了数据的相关信息,不会占据内存空间
#
# 仅当使用数组索引操作(eg. dataset[0:10])
# 或类方法.value(eg. dataset.value() or dataset.[()])时数据被读入内存中
a = np.random.rand(100, 1000, 1000).astype('float32')
# 调整数据预留存储空间(可以一次性调大些)
dataset.resize([times100+100, 1000, 1000])
# 数据被读入内存
dataset[times
100:times*100+100] = a
# print(sys.getsizeof(h5f))
h5f.close()

def load_h5():
h5f = h5py.File('data.h5', 'r')
data = h5f['data'][0:10]
# print(data)

if name == 'main':
# save_h5(0)
for i in range(20):
save_h5(i)
# 部分数据导入内存
load_h5()

posted @ 2018-03-28 18:42  blog_hfg  阅读(186)  评论(0)    收藏  举报