A Sunday 11 May 2008, David Wilson escrigué: > Here is more detail on the error (*TypeError: invalid type for > ``rating`` column: <type 'int'>* > ) I get. Thanks for your help: > > ################################## > dcw$ python test1-insert.py > > movie3.h5 (File) '' > Last modif.: 'Sat May 10 14:25:08 2008' > Object Tree: > / (RootGroup) '' > /ratings (Table(7L,)) '' > /ratings (Table(7L,)) '' Description([('date', '1i4'), ('movie', > '1i4'), ('rating', '1i1'), ('user', '1i4')]) > (0, 0, 0, 0) > (0, 17770, 0, 0) > (0, 17770, 2, 2031561) > (0, 0, 0, 0) > (0, 1, 0, 0) > (0, 1, 2, 0) > (0, 3, 3, 0) > 17770 > Traceback (most recent call last): > File "test1-insert.py", line 16, in ? > row['rating'] = r[1] > File "TableExtension.pyx", line 1301, in > TableExtension.Row.__setitem__ *TypeError: invalid type for > ``rating`` column: <type 'int'> *Closing remaining opened files... > movie3.h5... done. > > ################################# > > dcw$ <[EMAIL PROTECTED]:~/netflix/data/bin$> cat test1-insert.py > > > import tables, datetime > h5f = tables.openFile('movie3.h5', 'a') > > tbl = h5f.root.ratings > print h5f, tbl, tbl.description > > for n in tbl.iterrows(): > print n > > row = tbl.row > > r = [2031561, 2, datetime.date(2003, 12, 29), 17770] > > row['date'] = r[2] > print r[3] > row['rating'] = r[1] > row['user'] = r[0] > row['movie'] = r[3] > > row.append() > tbl.flush() > > ################################## > #This works in through ipython > > > In [15]: tbl.flush > Out[15]: > <bound method Table.flush of /ratings (Table(4L,)) '' > description := { > "date": TimeCol(dflt=0, shape=1, itemsize=4, pos=0, indexed=False), > "movie": Col(dtype='Int32', shape=1, dflt=0, pos=1, indexed=False), > "rating": Col(dtype='Int8', shape=1, dflt=0, pos=2, indexed=False), > "user": Col(dtype='Int32', shape=1, dflt=0, pos=3, indexed=False)} > byteorder := little> > > In [27]: i = 3 > > In [28]: row = tbl.row > > In [29]: row['movie'] = i > > In [30]: row['rating'] = i > > In [31]: row.append() > > In [32]: tbl.flush() > > > > In [34]: for n in tbl.iterrows(): > ....: print n > ....: > ....: > (0, 0, 0, 0) > (0, 17770, 0, 0) > (0, 17770, 2, 2031561) > (0, 0, 0, 0) > (0, 1, 0, 0) > (0, 1, 2, 0) > (0, 3, 3, 0) > > In [35]: > > On 5/10/08, David Wilson <[EMAIL PROTECTED]> wrote: > > This is my first post. Thanks for your help. > > > > I am having a weird problem with my first attempt to use PyTables. > > > > In ipython, this works: > > > > import tables > > h5f = tables.open... > > tbl = h5f.root.ratings > > row in tbl.row > > row[column] = 3 > > row.append() > > > > ...but if I run the same code from a file ("python foo.py"). I get > > an error. Something like: > > type int not allowed for column in row.__setitem__ > > > > Let me know if this jumps out at you (can I use the normal python > > interperetor) does the type get messed up? > > > > I'll post the actual code later today. Thanks for your help! > > > > Dave
My guess is that you are using different interpreters in your ipython/python runs, and hence, using different versions of PyTables (and maybe using a very old PyTables version in your plain python run). The next works for me (using a > 2.0 version): --------------------------------------------------------------------- import tables, datetime class Movies(tables.IsDescription): date = tables.Time32Col() rating = tables.Int8Col() movie = tables.IntCol() user = tables.IntCol() h5f = tables.openFile('/tmp/movie3.h5', 'w') tbl = h5f.createTable(h5f.root, 'ratings', Movies) print h5f, tbl, tbl.description row = tbl.row r = [2031561, 2, datetime.date(2003, 12, 29), 17770] row['date'] = r[2].toordinal() print r[3] row['rating'] = r[1] row['user'] = r[0] row['movie'] = r[3] row.append() tbl.flush() for n in tbl.iterrows(): print n h5f.close() ---------------------------------------------------------------- Please note that I've had to use the .toordinal() method for the datetime object to be converted into a integer. Hope that helps, -- Francesc Alted ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ Pytables-users mailing list Pytables-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/pytables-users