Mercurial > hg > numerics
annotate numerics/manipulate.py @ 172:dc0a620a0368
add another example
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Fri, 03 Jul 2015 11:11:01 -0700 |
parents | cffa11cb91a0 |
children |
rev | line source |
---|---|
57 | 1 #!/usr/bin/env python |
2 # -*- coding: utf-8 -*- | |
3 | |
4 """ | |
5 manipulate CSV data | |
6 """ | |
7 | |
8 # imports | |
9 import argparse | |
10 import os | |
11 import sys | |
108 | 12 from .convert import default_cast, cast_columns |
110 | 13 from .data import transpose |
60 | 14 from .read import CSVParser |
136 | 15 from .sort import Sorter, sort_arg |
57 | 16 |
17 # module globals | |
125 | 18 __all__ = ['ManipulationParser', 'FloatParser', 'main'] |
110 | 19 |
57 | 20 |
60 | 21 class ManipulationParser(CSVParser): |
22 """CLI option parser for data manipulation""" | |
23 | |
108 | 24 types = default_cast |
25 | |
57 | 26 def __init__(self, **kwargs): |
27 kwargs.setdefault('description', __doc__) | |
60 | 28 CSVParser.__init__(self, **kwargs) |
136 | 29 self.add_argument('--sort', dest='sort', nargs='+', |
30 type=sort_arg, | |
31 help="column to sort by; will be reverse if prepended by '-'") | |
57 | 32 self.options = None |
33 | |
60 | 34 def typed_data(self): |
108 | 35 """return parsed and casted data""" |
136 | 36 columns = cast_columns(self.columns(), self.types) |
37 | |
38 if self.options.sort: | |
39 # sort the data | |
40 sorter = Sorter(*self.options.sort) | |
41 rows = sorter(transpose(columns)) | |
42 | |
43 # re-transpose | |
44 columns = transpose(rows) | |
45 | |
46 return columns | |
110 | 47 |
48 def process(self): | |
49 return transpose(self.typed_data()) | |
57 | 50 |
111
c4d26ef63d8e
fix error in convert and i think this works sorta well enouigh for now
Jeff Hammel <k0scist@gmail.com>
parents:
110
diff
changeset
|
51 |
125 | 52 class FloatParser(ManipulationParser): |
53 """manipulation parser convenience just for floats""" | |
54 types = (float,) | |
55 | |
56 | |
57 | 57 def main(args=sys.argv[1:]): |
58 """CLI""" | |
59 | |
60 # parse command line options | |
106 | 61 parser = ManipulationParser() |
57 | 62 options = parser.parse_args(args) |
63 | |
110 | 64 # write manipulated data |
65 parser.write(parser.process()) | |
66 | |
57 | 67 if __name__ == '__main__': |
68 main() |