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 <walksl...@gmail.com> > 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? Cheers, Andre def is_array(file,path): data = file.getNode(path) if str(type(data)) == "<class 'tables.array.Array'>": found_array = True 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 Pytables-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/pytables-users