Hello list, I'm trying to use Pytables and have run into a problem.

I first create a table with some initial values, but at some point I have to
add some columns. I have seen an example of this in the
*examples/*directory in the source package (
http://pytables.org/svn/pytables/branches/std-2.1/examples/add-column.py).
The example seems to run fine... unless I carry on appending rows to the
table after I add the column. See below the modified example which is giving
me problems.

Armando.
-----

"Modified from
http://pytables.org/svn/pytables/branches/std-2.1/examples/add-column.py";

from tables import *

class Particle(IsDescription):
    name        = StringCol(16, pos=1)   # 16-character String
    lati        = Int32Col(pos=2)        # integer
    longi       = Int32Col(pos=3)        # integer
    pressure    = Float32Col(pos=4)    # float  (single-precision)
    temperature = Float64Col(pos=5)      # double (double-precision)

# Open a file in "w"rite mode
fileh = openFile("add-column.h5", mode = "w")
# Create a new group
group = fileh.createGroup(fileh.root, "newgroup")

# Create a new table in newgroup group
table = fileh.createTable(group, 'table', Particle, "A table", Filters(1))

# Append several rows
table.append([("Particle:     10", 10, 0, 10*10, 10**2),
              ("Particle:     11", 11, -1, 11*11, 11**2),
              ("Particle:     12", 12, -2, 12*12, 12**2)])

print "Contents of the original table:", fileh.root.newgroup.table[:]

# close the file
fileh.close()

# Open it again in append mode
fileh = openFile("add-column.h5", "a")
group = fileh.root.newgroup
table = group.table

# Get a description of table in dictionary format
descr = table.description._v_colObjects
descr2 = descr.copy()

# Add a column to description
descr2["hot"] = BoolCol(dflt=False)

# Create a new table with the new description
table2 = fileh.createTable(group, 'table2', descr2, "A table", Filters(1))

# Fill the rows of new table with default values
for i in xrange(table.nrows):
    table2.row.append()
# Flush the rows to disk
table2.flush()

# Copy the columns of source table to destination
for col in descr:
    getattr(table2.cols, col)[:] = getattr(table.cols, col)[:]

# Fill the new column
table2.cols.hot[:] = [ row["temperature"] > 11**2 for row in table ]

# Remove the original table
table.remove()

# Move table2 to table
table2.move('/newgroup','table')

# Print the new table
print "Contents of the table with column added:",
fileh.root.newgroup.table[:]

# ADD ONE MORE ROW
row = fileh.root.newgroup.table.row
row['hot'] = True
row.append()
fileh.root.newgroup.table.flush() ## HERE I GET AN ERROR ... NoSuchNodeError
... table2 ...

# Finally, close the file
fileh.close()
------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and 
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today. 
Use priority code J9JMT32. http://p.sf.net/sfu/p
_______________________________________________
Pytables-users mailing list
Pytables-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pytables-users

Reply via email to