3
我有幾個hdf5
文件,每個文件具有相同的結構。我想通過某種方式合併hdf5
文件來創建一個pytable
。將幾個hdf5文件合併到一個pytable中
我的意思是,如果file1中的數組的大小爲x,而file2中的數組的大小爲y,那麼pytable
中的結果數組的大小將爲x + y,包含file1中的所有條目,然後全部來自file2的條目。
我有幾個hdf5
文件,每個文件具有相同的結構。我想通過某種方式合併hdf5
文件來創建一個pytable
。將幾個hdf5文件合併到一個pytable中
我的意思是,如果file1中的數組的大小爲x,而file2中的數組的大小爲y,那麼pytable
中的結果數組的大小將爲x + y,包含file1中的所有條目,然後全部來自file2的條目。
你想如何做到這一點取決於你有的數據類型。數組和陣列具有靜態大小,因此您需要預先分配數據空間。因此,您可以執行以下操作:
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)
這可能很明顯,但我不清楚最後兩行是幹什麼的。 z應該是組合的輸出文件?這兩條線是否做同樣的事情?有沒有可能在這裏澄清變量的命名和定義? – aarslan
正在寫入的文件需要以追加(或寫入)模式打開。所以在打開'file3'時使用''a''而不是''r''。 – 153957
爲了讓這個例子起作用,我還必須將最後一行更改爲: 'z.append(y [:])' – user3197748