Как скопировать объект набора данных в другой файл hdf5, используя pytables или h5py? - PullRequest
0 голосов
/ 24 ноября 2018

Я выбрал определенные наборы данных hdf5 и хочу скопировать их в новый файл hdf5.Я мог бы найти несколько руководств по копированию между двумя файлами, но что, если вы только что создали новый файл и хотите скопировать наборы данных в файл?Я думал, что путь ниже будет работать, но это не так.Есть ли простые способы сделать это?

>>> dic_oldDataset['old_dataset']
<HDF5 dataset "old_dataset": shape (333217,), type "|V14">

>>> new_file = h5py.File('new_file.h5', 'a')
>>> new_file.create_group('new_group')

>>> new_file['new_group']['new_dataset'] = dic_oldDataset['old_dataset']


RuntimeError: Unable to create link (interfile hard links are not allowed)

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Ответ 2 (с использованием pytables):
Это следует тому же процессу, что и выше, с функциями pytables.Он создает тот же простой структурированный массив для заполнения первого набора данных в первом файле.Затем данные считываются из этого набора данных и копируются во второй файл, используя my_array.

import tables, numpy as np

arr = np.array([(1,'a'), (2,'b')], 
      dtype=[('foo', int), ('bar', 'S1')]) 
print (arr.dtype)
h5file1 = tables.open_file('test1.h5', mode = 'w', title = 'Test file')
my_group = h5file1.create_group('/', 'ex_group1', 'Example Group')
my_table = h5file1.create_table(my_group, 'ex_ds1', None, 'Example dataset', obj=arr)                
print (h5file1)

my_array=my_table.read()

h5file2 = tables.open_file('test2.h5', mode = 'w', title = 'Test file')
h5file2.create_table('/exgroup2', 'ex_ds2', createparents=True, obj=my_array)
print (h5file2)

h5file1.close()
h5file2.close()
0 голосов
/ 25 ноября 2018

Ответ 1 (с использованием h5py):
Это создает простой структурированный массив для заполнения первого набора данных в первом файле.Затем данные считываются из этого набора данных и копируются во второй файл, используя my_array.

import h5py, numpy as np

arr = np.array([(1,'a'), (2,'b')], 
      dtype=[('foo', int), ('bar', 'S1')]) 
print (arr.dtype)

h5file1 = h5py.File('test1.h5', 'w')
h5file1.create_dataset('/ex_group1/ex_ds1', data=arr)                
print (h5file1)

my_array=h5file1['/ex_group1/ex_ds1']

h5file2 = h5py.File('test2.h5', 'w')
h5file2.create_dataset('/exgroup2/ex_ds2', data=my_array)
print (h5file2)

h5file1.close()
h5file2.close()
...