# Read sets from file and generate all strings obeying template (list or string) def generatePatternFromFile(template='ONC', setFile='sampleset.txt'): return generatePattern(template, readSetsFromFile(setFile)) # Read sets from file # Sets are defined as blocks of lines # The first line in a block defines the key for templates # Blocks are delimited by line breaks def readSetsFromFile(fn): fh = open(fn) setOpen = False result = {} s = [] key = '' for line in fh: line = line.strip() if line == '': result[key] = s setOpen = False elif setOpen: s = s + [line] else: key = line s = [] setOpen = True if setOpen: result[key] = s return result # Generate all strings obeying template (a list or string) with the sets defined def generatePattern(template, sets): result = sets[template[0]] for t in template[1:]: result = expandPattern(result, sets[t]) return result # Extend a list of partial patterns with the next possible set of items in the string def expandPattern(previous, expansions): result = [] for item in previous: for x in expansions: newItem = item + x result = result + [newItem] return result