使用Pytables将所有行从一个表追加到另一个表

时间:2014-07-22 15:06:05

标签: python database hdf5 pytables

让我们举例如下:

import tables
import numpy as np

# Two Example Tables
hfile = tables.open_file('myfile.h5', 'a')
data1 = np.ones((3, 2))
data1.dtype = [('a', float), ('b', float)]
data2 = np.zeros((3, 2))
data2.dtype = [('a', float), ('b', float)]

table1 = hfile.create_table(where='/', name='table1', obj=data1)
table2 = hfile.create_table(where='/', name='table2', obj=data2)

# Appending
table1.append(table2.read())
table2.remove()

hfile.flush()
hfile.close()

有没有更好的方法在磁盘上执行此操作?

一种解决方案是遍历行:

for r in table2.iterrows():
    table1.append([r[:]])

后者看起来很笨重,前者在追加之前将整个第二张桌子记入记忆中。我宁愿做类似的事情:

table2.append_where(dstTable=table1)

但是这个函数只适用于一个条件,所以我需要一个总是求值为true的函数来获取整个表。当然必须有更好的方法。

2 个答案:

答案 0 :(得分:0)

我认为append_where()具有像'True'这样的微不足道的条件可能是最佳解决方案。

答案 1 :(得分:0)

我为PyTables创建了一个pull request来使条件可选,就像@jtorca所要求的那样。鉴于support voiced by one of the maintainers,它很可能被接受并包含在PyTables的未来版本中。