On Sep 11, 9:42 am, Stefan Behnel <stefan...@behnel.de> wrote: > JBwrote: > > I have created a small program that generates a project tree from a > > dictionary. The dictionary is of key/value pairs where each key is a > > directory, and each value is a list. The list have unique values > > corresponding to the key, which is a directory where each value in the > > list becomes a subdirectory. > > > The question that I have is how to do this process if one of the > > unique values in the list is itself a dict. For example, in the > > "projdir" dict below, suppose the "Analysis" value in the list > > corresponding to the "Engineering" key was itself a dict and was > > assigned {'Analysis' : 'Simulink'} for example. > > You might want to read up on recursion, i.e. a function calling itself. > > You can find out if something is a dict like this: > > isinstance(x, dict) > > or, if you know it really is a dict and not a subtype: > > type(x) is dict > > Stefan
Stefan; Thanks for your valuable suggestion. I have employed your suggestion with the code below. I also converted this to object oriented design. With this type of construction, the program will easily handle the dictionary specified by the self.proj variable. This variable is a dictionary with some of the value variables also being dictionaries. I did not generalize the function call but have more of horizontal code for this area of the implementation. If this program were packaged with a GUI, it would make the beginning of a project management software platform. -James from time import strftime import os #------------------------------------- # Print/Make Directories #------------------------------------- class Tree: def __init__(self,dir_main,dir_sub,sch_names,drawing_name): self.proj = {'Project' : ['Schedule', 'Specifications'], 'Schematics_PCB' : [{'SCH':sch_names},{'BOM':sch_names}, {'ASSY':sch_names}, {'RELEASE':sch_names}], 'Drawings' : [{'System':drawing_name}, {'Board':sch_names}, 'Packaging_3D'], 'Engineering' : [{'Analysis': ['Simulink','Matlab','Excel', 'MathCad','Python']}, {'Eng Reports':sch_names}, {'Design Reviews':sch_names}, {'Procedures':['Board Test','System Test']}]} self.sch_names = sch_names self.drawing_name = drawing_name self.dir_main = dir_main self.dir_sub = dir_sub self.root = self.dir_main + self.dir_sub self.pathname = '' self.suffix = "\\Previous \n" self.recursion = 0.0 self.zs = '' def gen_dir(self): if os.path.exists(self.pathname): pass else: os.makedirs(self.pathname) return def print_path(self): print self.pathname Tree.gen_dir(self) self.zs = self.pathname + self.suffix Tree.gen_dir(self) print self.zs #------------------------------------- # Make a Directory Project Tree #------------------------------------- def make_tree(self): counter = 0 print "This project tree for " + self.dir_sub[0:-1] + " was completed by " print "Generated on " + strftime("%m/%d/%Y at %H.%M hours") print "The project tree / dictionary was found to have the following: \n" #------------------------------------------------------------------------- # Iterate over items in the dictionary, creating tuples of key/value pairs #------------------------------------------------------------------------- for key, values in self.proj.iteritems(): counter = counter + 1 print "Key #" + str(counter) + " is " + "'" + key + "\\" print "For this key, the values are " + str(values) print "Thus, the results of generating directories for this " print " key/values combo are: \n" #--------------------------------------------------------- # Iterate over the invidividual unique values in the list # that is associated with each key in the dict, where # an individual value may itself be a dict #--------------------------------------------------------- for unique in values: prefix = self.root + key + "/" if isinstance(unique, dict) == True: for kx,vx in unique.iteritems(): if isinstance(vx,list) == True: for items in vx: self.pathname = prefix + kx + "\\" + items Tree.print_path(self) else: self.pathname = prefix + kx + "\\" + vx Tree.print_path(self) else: self.pathname = prefix + unique Tree.print_path(self) if __name__== "__main__": #------------------------------------- # DEFINE Root Dir & Path, Sch Numbers #------------------------------------- sch_names = ['AD501','AD502','AD503'] drawing_name = 'AD601' dir_main = '\\\MAIN\\PUBLIC\\ABC\\TEST\\' dir_sub = "MDX\\" rootdir = dir_main + dir_sub #------------------------------------- # DEFINE Directory Tree for Project #------------------------------------- t = Tree(dir_main,dir_sub,sch_names,drawing_name) t.make_tree() -- http://mail.python.org/mailman/listinfo/python-list