annotate numerics/fields.py @ 164:c16940bd2cee

this works
author Jeff Hammel <k0scist@gmail.com>
date Fri, 15 May 2015 16:59:09 -0700
parents 37378374b218
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
39
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env python
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
3
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
4 """
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
5 fields CSV
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
6 """
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
7
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
8 # imports
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
9 import csv
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
10 string = (str, unicode)
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
11
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
12 class FieldsCSV(object):
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
13 """fields-based CSV"""
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
14
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
15 fields = [] # ABC
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
16
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
17 @classmethod
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
18 def names(cls):
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
19 return [field[0] for field in cls.fields]
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
20
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
21 def parse(f):
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
22 if isinstance(f, string):
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
23 with open(f) as _f:
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
24 return self.parse(_f)
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
25
40
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
26 reader = csv.reader(f)
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
27 retval = []
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
28 for row in reader:
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
29
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
30 # ensure row length is correct
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
31 if len(row) != len(self.fields):
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
32 raise Exception("{} | Unrecognized summary row: {}".format(f.name, row))
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
33
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
34 # make a data object
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
35 values = dict(zip(self.names(), row))
39
3c3b793fcffc boilerplate
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
36
40
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
37 # convert
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
38 try:
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
39 for name, _type in self.fields:
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
40 values[name] = _type(values[name])
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
41 except Exception as e:
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
42 raise Exception("{} | Unable to convert row: {}".format(f.name, e))
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
43
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
44 retval.append(values)
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
45 return values
37378374b218 implement
Jeff Hammel <k0scist@gmail.com>
parents: 39
diff changeset
46