#!/usr/bin/env python """ randline.py - Read a Random Line from a File Author: Sean B. Palmer, inamidst.com """ import sys, random, fileinput from optparse import OptionParser def randline(lines, ignore=False): # Cf. http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/59865 # via http://swhack.com/logs/2006-01-12#T22-05-54 g = enumerate(lines) try: i, result = g.next() except StopIteration: return else: if ignore and not result.strip(): result = None for i, line in g: if ignore and not line.strip(): continue if random.uniform(0, i) < 1: result = line return result def main(argv=None): parser = OptionParser(usage='%prog [options] *') parser.add_option('-i', '--ignore', action='store_true', default=False, help='ignore blank lines') options, args = parser.parse_args(argv) lines = fileinput.input(args or ['-']) result = randline(lines, ignore=options.ignore) sys.stdout.write(result) if __name__=="__main__": main()