annotate numerics/formatting.py @ 172:dc0a620a0368

add another example
author Jeff Hammel <k0scist@gmail.com>
date Fri, 03 Jul 2015 11:11:01 -0700
parents 3a1f04f33feb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
1 """
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
2 formatting tools for tabular data
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
3 """
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
4
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
5 __all__ = ['format_cols', 'format_table']
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
6
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
7 def format_cols(rows, header=None, right_align=()):
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
8 if not rows:
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
9 return []
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
10 if isinstance(rows[0], dict):
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
11 header = header or rows[0].keys()
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
12 rows = [[row[h] for h in header] for row in rows]
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
13 if header:
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
14 rows.insert(0, header)
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
15 rows.insert(1, ['-'*len(i) for i in header])
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
16 assert len(set([len(row) for row in rows])) == 1
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
17 rows = [[str(col).strip() for col in row]
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
18 for row in rows]
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
19 lengths = [max([len(row[i]) for row in rows])
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
20 for i in range(len(rows[0]))]
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
21 rows = [[(' '*(length-len(col)) + col) if index in right_align else (col + ' '*(length-len(col)))
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
22 for index, (col, length) in enumerate(zip(row, lengths))]
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
23 for row in rows]
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
24 return rows
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
25
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
26 def format_table(rows, header=None, right_align=(), joiner=' '):
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
27 """format a table for printing"""
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
28 rows = format_cols(rows, header=header, right_align=right_align)
3a1f04f33feb various generics
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
29 return '\n'.join([joiner.join([str(col) for col in row]).rstrip() for row in rows])