1 from __future__
import print_function
7 import cStringIO,operator
8 from functools
import reduce
9 def indent(rows,hasHeader=False,headerChar='-',delim=' | ',justify='center',
10 separateRows=
False,prefix=
'',postfix=
'',wrapfunc=
lambda x:x):
12 Indents a table by column. 13 - rows: A sequence of sequences of items, one sequence per row. 14 - hadHeader: True if the first row consists of the column's names. 15 - headerChar: Character to be used for the row separator line 16 (if hasHeader==True or separateRows==True). 17 - delim: The column delimiter. 18 - justify: Determines how are data justified in their column. 19 Valid values are 'left','right','center'. 20 - separateRows: True if rows are to be separated by a line of 'headerChar's. 21 - prefix: A string prepended to each printed row. 22 - postfix: A string appended to each printed row. 23 - wrapfunc: A function f(text) for wrapping text; each element in the table is first wrapped by this function. 32 return [[substr
or '' for substr
in item]
for item
in map(
None,*newRows)]
34 logicalRows = [rowWrapper(row)
for row
in rows]
36 columns =
map(
None,*reduce(operator.add,logicalRows))
38 maxWidths = [
max([len(
str(item))
for item
in column])
for column
in columns]
39 rowSeparator = headerChar * (len(prefix) + len(postfix) + sum(maxWidths) + len(delim)*(len(maxWidths)-1))
41 justify = {
'center':str.center,
'right':str.rjust,
'left':str.ljust}[justify.lower()]
42 output=cStringIO.StringIO()
43 if separateRows:
print(rowSeparator, file=output)
44 for physicalRows
in logicalRows:
45 for row
in physicalRows:
46 print(prefix+delim.join([justify(
str(item),width)
for (item,width)
in zip(row,maxWidths)])+postfix, file=output)
47 if separateRows
or hasHeader:
print(rowSeparator, file=output); hasHeader=
False 48 return output.getvalue()
50 if __name__ ==
'__main__':
51 from wordWrappers
import wrap_always,wrap_onspace,wrap_onspace_strict
52 labels=(
'First Name',
'Last Name',
'Age',
'Position')
53 data=
"""John,Smith,24,Software Engineer 54 Mary,Brohowski,23,Sales Manager 55 Aristidis,Papageorgopoulos,28,Senior Reseacher""" 56 rows=[row.strip().
split(
',')
for row
in data.splitlines()]
58 print(
'without wrapping function\n')
59 print(
'raw input: ',[labels]+rows)
62 for wrapper
in (wrap_always,wrap_onspace,wrap_onspace_strict):
63 print(
'Wrapping function: %s(x,width=%d)\n'%(wrapper.__name__,width))
64 print(
indent([labels]+rows,hasHeader=
True,separateRows=
True,prefix=
'| ',postfix=
' |',wrapfunc=
lambda x:
wrapper(x,width)))
67 (
'%-*s'%(8,
'run'),
'%-*s'%(8,
'first'),
'%-*s'%(8,
'last'),
'%-*s'%(10,
'delivered'),
'%-*s'%(10,
'recorded'),
'%-*s'%(20,
'recorded\nmypathdfdafddafd')),\
68 [
'%d'%(132440),
'%d'%(23),
'%d'%(99),
'%.2f'%(2.345),
'%.2f'%(1.23),
'%.2f'%(0.5678)],\
69 [
'%d'%(132442),
'%d'%(1),
'%d'%(20),
'%.2f'%(2.345),
'%.2f'%(1.23),
'%.2f'%(0.5678)],\
70 [
'',
'%d'%(27),
'%d'%(43),
'%.2f'%(2.345),
'%.2f'%(1.23),
'%.2f'%(0.5678)]\
72 lumiheader=[(
'%-*s'%(30,
'Lumi Sections'),
'%-*s'%(46,
'Luminosity'))]
74 print(
indent(lumiheader,hasHeader=
True,separateRows=
False,prefix=
'| ',postfix=
'',wrapfunc=
lambda x:
wrap_always(x,headerwidth)))
75 lumifooter=[(
'%-*s'%(24,
'189'),
'%-*s'%(10,
'17.89'),
'%-*s'%(10,
'16.1'),
'%-*s'%(20,
'3.47'))]
79 print(
indent(lumifooter,hasHeader=
False,separateRows=
True,prefix=
' total: ',postfix=
'',delim=
' | ',wrapfunc=
lambda x:
wrap_always(x,25)))
S & print(S &os, JobReport::InputFile const &f)
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
static HepMC::HEPEVT_Wrapper wrapper
def indent(rows, hasHeader=False, headerChar='-', delim='| ', justify='center', separateRows=False, prefix='', postfix='', wrapfunc=lambda x:x)