Bir çözüm, düşük seviyeli HDF5 API H5Ocopy
function için h5py
arayüzü kullanmak için özellikle h5py.h5o.copy
function: Yukarıdaki h5py
sürüm 2.0.1-2+b1
ve ipython sürüm 0.13.1-2+deb7u1
oluşturulacak olan
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'
Debian Wheezy'nin bir veya daha az vanilya yüklemesinden Python versiyon 2.7.3-4+deb7u1
'un üstüne. Yukarıdakileri uygulamadan önce f1.h5
ve f2.h5
dosyaları mevcut değildi. düşük seviyeli arayüz görünüşte hep diskte saklanan .h5
dosyada, bellekte önbelleğe bunun sürümünden çekecek şekilde
komuta [7]
yılında hf1.flush()
, çok önemlidir. Veri kümelerinin, File
'un kökünde olmayan gruplara/gruplara kopyalanması, örneğin hf1.get("g1").id
kullanılarak o grubun kimliğinin sağlanmasıyla sağlanabilir.belirtilen ada sahip bir nesne zaten hedef konumda olup olmadığını h5py.h5o.copy
istisna (hiçbir clobber) ile başarısız olacağını
Not.
Bu sorunun yanıtlandığı anlaşılıyor: http://stackoverflow.com/questions/5346589/concatenate-a-large-number-of-hdf5-files –
@MattPavelle anladığım kadarıyla bu istediğimden farklı . Veri kümelerini tek bir veri kümesinde birleştirmek istemiyorum, ancak bunları bir dosya içinde ayrı veri kümeleri olarak tutmak istiyorum. – Bitwise
Anladım, açıklama ve düzenleme için teşekkürler. Ve izlemeyi affet - HDF5 ile oynadığımdan beri birkaç yıl geçti - ama h5merge'nin hile yapmadığını mı sanıyorum? –