| 699 | 1 #!/usr/bin/env python | 
|  | 2 # -*- coding: utf-8 -*- | 
|  | 3 | 
|  | 4 """ | 
|  | 5 slice a arbitrarily sized list | 
|  | 6 """ | 
|  | 7 | 
|  | 8 # imports | 
|  | 9 import argparse | 
|  | 10 import os | 
|  | 11 import subprocess | 
|  | 12 import sys | 
|  | 13 | 
| 700 | 14 __all__ = ['slice', 'main', 'Parser'] | 
| 699 | 15 | 
|  | 16 def slice(container, n_chunks): | 
| 700 | 17     size = int(len(container)/(n_chunks-1)) | 
|  | 18     retval = [] | 
|  | 19     start = 0 | 
|  | 20     for i in range(n_chunks-1): | 
|  | 21         retval.append(container[start:start+size]) | 
|  | 22         start += size | 
|  | 23     retval.append(container[start:]) | 
|  | 24     return retval | 
| 699 | 25 | 
|  | 26 class Parser(argparse.ArgumentParser): | 
|  | 27     """CLI option parser""" | 
|  | 28     def __init__(self, **kwargs): | 
|  | 29         kwargs.setdefault('description', __doc__) | 
|  | 30         argparse.ArgumentParser.__init__(self, **kwargs) | 
|  | 31         self.add_argument('N', type=int, | 
|  | 32                           help="number of chunks") | 
| 700 | 33         self.add_argument('-M', '--len', dest='length', type=int, default=29, | 
|  | 34                           help="length of list [DEFAULT: %(default)s]") | 
| 699 | 35         self.options = None | 
|  | 36 | 
|  | 37     def parse_args(self, *args, **kw): | 
|  | 38         options = argparse.ArgumentParser.parse_args(self, *args, **kw) | 
|  | 39         self.validate(options) | 
|  | 40         self.options = options | 
|  | 41         return options | 
|  | 42 | 
|  | 43     def validate(self, options): | 
|  | 44         """validate options""" | 
|  | 45 | 
|  | 46 def main(args=sys.argv[1:]): | 
|  | 47     """CLI""" | 
|  | 48 | 
|  | 49     # parse command line options | 
|  | 50     parser = Parser() | 
|  | 51     options = parser.parse_args(args) | 
|  | 52 | 
| 700 | 53     # generate list | 
|  | 54     seq = range(options.length) | 
|  | 55 | 
|  | 56     # chunk list | 
|  | 57     output = slice(seq, options.N) | 
|  | 58 | 
|  | 59     # print output | 
|  | 60     for chunk in output: | 
|  | 61         print (",".join([str(i) for i in chunk])) | 
|  | 62 | 
| 699 | 63 if __name__ == '__main__': | 
|  | 64     main() | 
|  | 65 |