Una soluzione è quella di utilizzare l'interfaccia h5py
al basso livello H5Ocopy
function delle API HDF5, in particolare h5py.h5o.copy
function:
In [1]: import h5py as h5
In [2]: hf1 = h5.File("f1.h5")
In [3]: hf2 = h5.File("f2.h5")
In [4]: hf1.create_dataset("val", data=35)
Out[4]: <HDF5 dataset "val": shape(), type "<i8">
In [5]: hf1.create_group("g1")
Out[5]: <HDF5 group "/g1" (0 members)>
In [6]: hf1.get("g1").create_dataset("val2", data="Thing")
Out[6]: <HDF5 dataset "val2": shape(), type "|O8">
In [7]: hf1.flush()
In [8]: h5.h5o.copy(hf1.id, "g1", hf2.id, "newg1")
In [9]: h5.h5o.copy(hf1.id, "val", hf2.id, "newval")
In [10]: hf2.values()
Out[10]: [<HDF5 group "/newg1" (1 members)>, <HDF5 dataset "newval": shape(), type "<i8">]
In [11]: hf2.get("newval").value
Out[11]: 35
In [12]: hf2.get("newg1").values()
Out[12]: [<HDF5 dataset "val2": shape(), type "|O8">]
In [13]: hf2.get("newg1").get("val2").value
Out[13]: 'Thing'
Quanto sopra è stato generato con h5py
versione 2.0.1-2+b1
e ipython versione 0.13.1-2+deb7u1
in cima alla versione Python 2.7.3-4+deb7u1
da un'installazione vanilla più o meno di Debian Wheezy. I file f1.h5
e f2.h5
non esistevano prima dell'esecuzione di quanto sopra.
Il hf1.flush()
al comando [7]
è fondamentale, come l'interfaccia di basso livello a quanto pare sarà sempre attingere alla versione del file .h5
memorizzato su disco, non che nella cache in memoria. Copiare i set di dati verso/da gruppi non presenti nella radice di un File
può essere ottenuto fornendo l'ID di quel gruppo usando, ad es., hf1.get("g1").id
.
Si noti che h5py.h5o.copy
non riuscirà con un'eccezione (nessun clobber) se un oggetto del nome indicato esiste già nel percorso di destinazione.
Sembra che questo abbia già risposto: http://stackoverflow.com/questions/5346589/concatenate-a-large-number-of-hdf5-files –
@MattPavelle per quanto ho capito questo è diverso da quello che voglio . Non voglio concatenare i set di dati in un singolo set di dati, ma per mantenerli come set di dati separati all'interno di un unico file. – Bitwise
Capito, grazie per il chiarimento e la modifica. E perdona il seguito - sono passati alcuni anni da quando ho giocato con HDF5 - ma presumo che h5merge non faccia il trucco? –