2017-07-25 72 views
1

我想將時間序列(傳感器數據)的結果存儲到HDF5文件中。我似乎無法將值分配給我的數據集。很顯然,我做錯了什麼,我只是不知道是什麼......以HDF5格式存儲時間序列

代碼:

from datetime import datetime, timezone 
import h5py 

TIME_SERIES_FLOAT = np.dtype([("time", h5py.special_dtype(vlen=str)), 
           ("value", np.float)]) 

h5 = h5py.File('balh.h5', "w") 
dset = create_dataset('data', (1, 2), chunks=True, maxshape=(None, 2), dtype=TIME_SERIES_FLOAT) 
dset[0]['time'] = datetime.now(timezone.utc).astimezone().isoformat() 
dset[0]['value'] = 0.0 

然後,更新代碼調整大小的數據集,並增加了更多的價值。顯然,這樣做,每個值是無效的:

size = list(dset.shape) 
size[0] += 1 
dset.resize(tuple(size)) 
dset[size[0]-1]['time'] = datetime.now(timezone.utc).astimezone().isoformat() 
dset[size[0]-1]['value'] = value 

一個更好的方法是將一些數據整理成np.array,然後補充說,每隔一段時間...

這是明智的......

回答

1

我?需要更多的咖啡...

定義的類型是含有一個字符串(又名的時間)的元組和浮子(又名的值),以便增加一個,我需要:

dset[-1] = (datetime.now(timezone.utc).astimezone().isoformat(), value) 

這其實很簡單!

添加許多條目做是這樣的:

l = [('stamp', x) for x in range(10)] 
size = list(dset.shape) 
tmp = size[0] 
size[0] += len(l) 
dset.resize(tuple(size)) 
for x in range(len(l)):             
    dset[tmp+x] = l[x] 

儘管如此,這種感覺有點笨重,次優...