#! /usr/bin/env python import sys, os, string, whrandom, cp generator = whrandom.whrandom() def shuffle(listin): newlist = listin[:] for i in range(len(newlist)): n = generator.randint(0, len(newlist)-1) newlist[i], newlist[n] = newlist[n], newlist[i] return newlist def main(): """ %(filename)s Randomizes the lines of a file and writes the first n entries. Use to pick a random subset of items from a list. {{out name of outfile (stdout is default)}} {{n number of lines to pick; default is all}} {{h Prints documentation.}} {{v verbosity 1}} {{version print version info and exit}} %(version)s """ debug = 0 docstringdict = {'filename':os.path.split(sys.argv[0])[-1], 'version':'$Id: shuffle.py,v 1.1 2004/10/10 02:53:10 nghoffma Exp $'} optlist, formattedDocString, formattedSummary = cp.optStringParser(main.__doc__ % docstringdict, optWidth=15, lineWidth=60, valOffset = 4, putVals=1) dict = cp.commandparser(options=optlist, usage='Options:\n' + formattedSummary, debug = debug, exitWithUsage=1) if dict.status('version'): sys.exit( 'Version: %(version)s\n' % docstringdict ) if dict.status('h'): print formattedDocString sys.exit( 0 ) v = dict.value('v') file_list = dict.value('infile_list', 'in', 'file') if dict.status('out'): outfile = dict.value('out', 'out', 'file') else: outfile = sys.stdout numbertoprint = 0 if dict.status('n'): numbertoprint = dict.value('n') inputList = [] for file in file_list: for line in file: if line.strip() == '': continue inputList.append(line) file.close() if numbertoprint > len(inputList): numbertoprint = len(inputList) elif numbertoprint == 0: numbertoprint = len(inputList) shuffled = shuffle(inputList) outfile.write(string.join(shuffled[0:numbertoprint], '')) main()