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"""