Mercurial > hg > numerics
comparison numerics/table.py @ 180:69543d62ae7a
more split stubbing
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Tue, 09 Aug 2016 14:34:31 -0700 |
parents | f63194f81f7d |
children |
comparison
equal
deleted
inserted
replaced
179:f63194f81f7d | 180:69543d62ae7a |
---|---|
10 import csv | 10 import csv |
11 import json | 11 import json |
12 import os | 12 import os |
13 import sys | 13 import sys |
14 import time | 14 import time |
15 from collections import OrderedDict | |
15 | 16 |
16 string = (str, unicode) | 17 string = (str, unicode) |
17 | 18 |
18 | 19 |
19 def duplicates(*values): | 20 def duplicates(*values): |
54 if verbose: | 55 if verbose: |
55 print "Header:\n{header}".format(header=json.dumps(header, indent=1)) | 56 print "Header:\n{header}".format(header=json.dumps(header, indent=1)) |
56 duplicate_fields = duplicates(*header) | 57 duplicate_fields = duplicates(*header) |
57 if duplicate_fields: | 58 if duplicate_fields: |
58 raise AssertionError("Duplicate header fields found: {duplicates}".format(duplicates=', '.join(duplicate_fields))) | 59 raise AssertionError("Duplicate header fields found: {duplicates}".format(duplicates=', '.join(duplicate_fields))) |
59 return [dict(zip(header, row)) | 60 return [OrderedDict(zip(header, row)) |
60 for row in data] | 61 for row in data] |
61 | 62 |
62 | 63 |
63 class TableParser(argparse.ArgumentParser): | 64 class TableParser(argparse.ArgumentParser): |
64 """CLI option parser""" | 65 """CLI option parser""" |
98 | 99 |
99 assert self.options | 100 assert self.options |
100 | 101 |
101 data = read_table(self.options.input, | 102 data = read_table(self.options.input, |
102 verbose=self.options.verbose) | 103 verbose=self.options.verbose) |
103 | 104 if not data: |
105 parser.error("No data found: {}".format(self.options.intput)) | |
104 if self.options.columns: | 106 if self.options.columns: |
107 header = data[0].keys() | |
105 missing = [column | 108 missing = [column |
106 for column in self.options.columns | 109 for column in self.options.columns |
107 if column not in header] | 110 if column not in header] |
108 if missing: | 111 if missing: |
109 self.error("Columns not found in header: {0}".format(", ".join(missing))) | 112 self.error("Columns not found in header: {0}".format(", ".join(missing))) |
110 header = options.columns | 113 header = options.columns |
111 data = [dict(zip(header, | 114 data = [OrderedDict(zip(header, |
112 [row[column] for column in header])) | 115 [row[column] for column in header])) |
113 for row in data] | 116 for row in data] |
114 return data | 117 return data |
115 | 118 |
116 def main(args=sys.argv[1:]): | 119 def main(args=sys.argv[1:]): |
117 """CLI""" | 120 """CLI""" |