From: Anthony S. <sc...@gm...> - 2012-06-14 22:28:41
|
On Thu, Jun 14, 2012 at 4:30 PM, Andre' Walker-Loud <wal...@gm...>wrote: > Hi Anthony, > > On Jun 14, 2012, at 11:30 AM, Anthony Scopatz wrote: > > > On Wed, Jun 13, 2012 at 8:23 PM, Andre' Walker-Loud <wal...@gm...> > wrote: > > Hi All, > > > > Still trying to sort out a recursive walk through an hdf5 file using > pytables. > > > > I have an hdf5 file with an unknown depth of groups/nodes. > > > > I am trying to write a little function to walk down the tree (with user > input help) until a data file is found. > > > > I am hoping there is some function one can use to query whether you have > found simply a group/node or an actual numpy array of data. So I can do > something like > > > > if f.getNode('/',some_path) == "data_array": > > return f.getNode('/',some_path), True > > else: > > return f.getNode('/',some_path), False > > > > where I have some function that if the second returned variable is True, > will recognize the file as data, where as if it is False, it will query the > user for a further path down the tree. > > > > > > I suppose I could set this up with a try: except: but was hoping there > is some built in functionality to handle this. > > > > Yup, I think that you are looking for the File.walkNodes() method. > http://pytables.github.com/usersguide/libref.html#tables.File.walkNodes > > I wasn't sure how to use walkNodes in an interactive search. Here is what > I came up with so far (it works on test cases I have given it). Comments > are welcome. > > One feature I would like to add to the while loop in the second function > is an iterator counting the depth of the search. I want to compare this to > the maximum tree/node/group depth in the file, so if the search goes over > (maybe my collaborators used createTable instead of createArray) the while > loop won't run forever. > > Is there a function to ask the deepest recursion into the hdf5 file? > Hello Andre, Every Node object has a _v_depth attr that you can access ( http://pytables.github.com/usersguide/libref.html#tables.Node._v_depth). In your walk function, therefore, you could test to see if you are over or under the maximal value that you set. > > Cheers, > > Andre > > > def is_array(file,path): > data = file.getNode(path) > if str(type(data)) == "<class 'tables.array.Array'>": > found_array = True > Just one quick comment. You probably shouldn't test the string of the type of the data. Use the builtin isinstance() instead: found_array = isinstance(data, tables.Array) Be Well Anthony > else: > found_array = False > for g in file.getNode(path): > print g > return data, found_array > > def pytable_walk(file): > found_data = False > path = '' > while found_data == False: > for g in file.getNode('/',path): > print g > path_new = raw_input('which node would you like?\n ') > path = path+'/'+path_new > data,found_data = is_array(file,path) > return path,data > > > > > > > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Pytables-users mailing list > Pyt...@li... > https://lists.sourceforge.net/lists/listinfo/pytables-users > |