Без ваших данных (и данных strcuture) или примера кода трудно привести пример, специфичный для вашей проблемы. Я создал пример PyTables, который показывает основные операции. Есть много способов определить структуру таблицы и ввести данные. Мне нравится создавать np.dtype
и ссылку с description=
. В этом примере я создаю и добавляю данные построчно, используя список с одним кортежем. Однако, если у вас есть все данные, вы можете создать структурированный массив Numpy и ссылку с параметром obj=
. Это создаст массив и заполнит все за один снимок
Вот пример PyTables со 100 строками и массивами attr1 / 2/3 размером до 10 элементов. Это показывает логику. Вы можете изменить, чтобы увеличить количество строк и элементов массива.
Все методы таблицы PyTables описаны здесь:
Методы таблицы PyTables
import tables as tb
import numpy as np
attr1 = np.arange(10.)
attr2 = 2.0*np.arange(10.)
attr3 = 3.0*np.arange(10.)
attr4 = 4.0
attr5 = 5.0
attr6 = 6.0
ds_dt = np.dtype({'names':['attr1', 'attr2', 'attr3',
'attr4', 'attr5', 'attr6'],
'formats':[(float,10), (float,10), (float,10),
float, float, float ] })
with tb.File('SO_58674120_tb.h5','w') as h5f:
tb1 = h5f.create_table('/','my_ds', description=ds_dt)
for rcnt in range(1,100):
data_list = [ (rcnt*attr1, rcnt*attr2, rcnt*attr3,
rcnt*attr4, rcnt*attr5, rcnt*attr6), ]
tb1.append(data_list)
Вы можете сделать то же самое с h5py
. Процесс похож, но есть различия. Например, вам нужно изменить размер набора данных на shape=
и добавить maxshape=
, если вы хотите расширить набор данных в будущем. Кроме того, я только знаю, как добавить данные, ссылаясь на массивы numpy (не списки, как PyTables). Поэтому я создал recarr
для хранения промежуточных данных. Опять же, если у вас есть все ваши данные, вам не нужно загружать их построчно.
См. Код ниже:
import h5py
import numpy as np
attr1 = np.arange(10.)
attr2 = 2.0*np.arange(10.)
attr3 = 3.0*np.arange(10.)
attr4 = 4.0
attr5 = 5.0
attr6 = 6.0
ds_dt = np.dtype({'names':['attr1', 'attr2', 'attr3',
'attr4', 'attr5', 'attr6'],
'formats':[(float,10), (float,10), (float,10),
float, float, float ] })
recarr = np.empty((1,), dtype=ds_dt)
with h5py.File('SO_58674120_h5.h5','w') as h5f:
h5f.create_dataset('my_ds', dtype=ds_dt, shape=(100,), maxshape=(None) )
for rcnt in range(1,100):
recarr['attr1']= rcnt*attr1
recarr['attr2']= rcnt*attr2
recarr['attr3']= rcnt*attr3
recarr['attr4']= rcnt*attr4
recarr['attr5']= rcnt*attr5
recarr['attr6']= rcnt*attr6
h5f['my_ds'][rcnt] = recarr[0]