2013-10-01 61 views
3

我有幾個hdf5文件,每個文件具有相同的結構。我想通過某種方式合併hdf5文件來創建一個pytable將幾個hdf5文件合併到一個pytable中

我的意思是,如果file1中的數組的大小爲x,而file2中的數組的大小爲y,那麼pytable中的結果數組的大小將爲x + y,包含file1中的所有條目,然後全部來自file2的條目。

回答

4

你想如何做到這一點取決於你有的數據類型。數組和陣列具有靜態大小,因此您需要預先分配數據空間。因此,您可以執行以下操作:

import tables as tb 
file1 = tb.open_file('/path/to/file1', 'r') 
file2 = tb.open_file('/path/to/file2', 'r') 
file3 = tb.open_file('/path/to/file3', 'r') 
x = file1.root.x 
y = file2.root.y 

z = file3.create_array('/', 'z', atom=x.atom, shape=(x.nrows + y.nrows,)) 
z[:x.nrows] = x[:] 
z[x.nrows:] = y[:] 

但是,EArys和Tables是可擴展的。因此,您不需要預先分配大小,而是可以copy_node()和append()來代替。

import tables as tb 
file1 = tb.open_file('/path/to/file1', 'r') 
file2 = tb.open_file('/path/to/file2', 'r') 
file3 = tb.open_file('/path/to/file3', 'r') 
x = file1.root.x 
y = file2.root.y 

z = file1.copy_node('/', name='x', newparent=file3.root, newname='z') 
z.append(y) 
+0

這可能很明顯,但我不清楚最後兩行是幹什麼的。 z應該是組合的輸出文件?這兩條線是否做同樣的事情?有沒有可能在這裏澄清變量的命名和定義? – aarslan

+0

正在寫入的文件需要以追加(或寫入)模式打開。所以在打開'file3'時使用''a''而不是''r''。 – 153957

+0

爲了讓這個例子起作用,我還必須將最後一行更改爲: 'z.append(y [:])' – user3197748