2013-05-28 17 views
5

Sono nuovo di PyTables e ho implementato alcune tecniche di base per l'inserimento e il recupero dei dati da una tabella in Pytables. Tuttavia, non sono sicuro di come inserire i dati in una tabella esistente di PyTables perché tutto ciò che leggo/ottengo nel tutorial sta creando una nuova tabella (utilizzando il metodo h5file.createTable()). Ecco il codice di base che esercitazione ha circa l'inserimento dei dati nella tabella PytTables creato da zero:Aggiungi dati alla tabella pytables esistente

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() 

P.S. C'è uno place in questo tutorial che parla di accodamento di dati a una tabella esistente, ma utilizza la tabella che è stata creata da zero e in pratica non dà alcuna idea sulla selezione della tabella preesistente per l'aggiunta di dati. Gentilmente aiuto. Grazie.

risposta

11

È necessario aprire il file in modalità accodamento "a". Inoltre, non creare nuovamente il gruppo e la tabella. Questo aggiunge altre 10 righe:

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() 
+1

@khan Qualsiasi successo con questa soluzione? –

+0

Grazie a @Mike, ha funzionato perfettamente su Python 3.5 (con 'range' invece di' xrange') e dovrebbe essere contrassegnato come risposta. Ho leggermente modificato l'esempio per creare il gruppo e la tabella se mancano: https://gist.github.com/berezovskyi/10004d5fcf00a3d4477e – berezovskyi

Problemi correlati