from tables import * # This small program creates a simple HDF5 file called objecttree.h5 with the structure that appears in Figure 1.1 3 . When the file is created, the metadata in the object tree is updated in memory while the actual data is saved to disk. When you close the file the object tree is no longer available. However, when you reopen this file the object tree will be reconstructed in memory from the metadata on disk (this is done in a lazy way, in order to load only the objects that are required by the user), allowing you to work with it in exactly the same way as when you originally created it. # We have used ViTables (see [22]) in order to create this snapshot. from tables import * class Particle(IsDescription): identity = StringCol(itemsize=22, dflt=" ", pos=0) # character String idnumber = Int16Col(dflt=1, pos = 1) # short integer speed = Float32Col(dflt=1, pos = 1) # single-precision # Open a file in "w"rite mode fileh = openFile("objecttree.h5", mode = "w") # Get the HDF5 root group root = fileh.root # Create the groups: group1 = fileh.createGroup(root, "group1") group2 = fileh.createGroup(root, "group2") # Now, create an array in root group array1 = fileh.createArray(root, "array1", ["string", "array"], "String array") # Create 2 new tables in group1 table1 = fileh.createTable(group1, "table1", Particle) table2 = fileh.createTable("/group2", "table2", Particle) array2 =fileh.createArray("/group1", "array2", [1,2,3,4]) # Now, fill the tables: for table in (table1, table2): # Get the record object associated with the row = table.row # Fill the table with 10 records for i in xrange(10): # First, assign the values to the Particle record row['identity'] = 'This is particle: %2d' % (i) row['idnumber'] = i row['speed'] = i * 2. # This injects the Record values row.append() # Flush the table buffers table.flush() # Finally, close the file (this also will flush all the remaining buffers!) fileh.close()