我是PyTables的新手,并实现了一些从Pytables中的表中插入和检索数据的基本技术.但是,我不确定如何在现有的PyTables表中插入数据,因为我在教程中读取/获取的所有内容都是创建一个新表(使用h5file.createTable()方法).这是教程有关将数据插入从头创建的PytTables表的基本代码:
h5file = openFile("tutorial1.h5", mode = "w", title = "Test file")
group = h5file.createGroup("/", 'detector', 'Detector information')
table = h5file.createTable(group, 'readout', Particle, "Readout example")
for i in xrange(10):
particle['name'] = 'Particle: %6d' % (i)
particle['TDCcount'] = i % 256
particle['ADCcount'] = (i * 256) % (1 << 16)
particle['grid_i'] = i
particle['grid_j'] = 10 - i
particle['pressure'] = float(i*i)
particle['energy'] = float(particle['pressure'] ** 4)
particle['idnumber'] = i * (2 ** 34)
# Insert a new particle record
particle.append()
table.flush()
Run Code Online (Sandbox Code Playgroud)
PS 本教程中有一处讨论将数据附加到现有表,但使用从头创建的表,并且基本上不知道选择预先存在的表来附加数据.请帮助.谢谢.
Mik*_*ler 11
您需要以追加模式打开文件"a".也不要再次创建组和表.这会追加另外10行:
import tables
class Particle(tables.IsDescription):
name = tables.StringCol(16) # 16-character String
idnumber = tables.Int64Col() # Signed 64-bit integer
ADCcount = tables.UInt16Col() # Unsigned short integer
TDCcount = tables.UInt8Col() # unsigned byte
grid_i = tables.Int32Col() # 32-bit integer
grid_j = tables.Int32Col() # 32-bit integer
pressure = tables.Float32Col() # float (single-precision)
energy = tables.Float64Col() # double (double-precision)
h5file = tables.openFile("tutorial1.h5", mode = "a")
table = h5file.root.detector.readout
particle = table.row
for i in range(10, 20):
particle['name'] = 'Particle: %6d' % (i)
particle['TDCcount'] = i % 256
particle['ADCcount'] = (i * 256) % (1 << 16)
particle['grid_i'] = i
particle['grid_j'] = 10 - i
particle['pressure'] = float(i*i)
particle['energy'] = float(particle['pressure'] ** 4)
particle['idnumber'] = i * (2 ** 34)
# Insert a new particle record
particle.append()
h5file.close()
Run Code Online (Sandbox Code Playgroud)