Simple - Pretty Printing (pprint) a list with a max width?
Paul McGuire
ptmcg at austin.rr.com
Fri Nov 7 13:57:54 EST 2008
On Nov 7, 9:45 am, rh0dium <steven.kl... at gmail.com> wrote:
> Hi all,
>
> Perhaps it's not supposed to work like this but I thought if you
> supplied a width to pprint it would nicely format a list to the
> width.
>
> KEYS = ['search_keys', 'Section', 'site', 'Employee', 'JobClassCode',
> 'XBoss', 'Department',
> 'LocationDesc', 'cn', 'Division', 'Fax', 'SectionCode',
> 'last_update', 'location',
> 'mail', 'Nickname', 'JobClass', 'username', 'Name',
> 'Shift', 'FunctionalArea', 'p4user',
> 'euid', 'Position', 'DivisionCode', 'OfficePhone',
> 'CellPhone', 'Supervisor', 'aim',
> 'url', 'aim_id', 'Assistant', 'DeptNo', 'OtherPhone',
> 'LocationCode']
>
> pp = pprint.PrettyPrinter(indent=2)
> pp.pprint(KEYS)
> [ 'search_keys',
> 'Section',
> .
> .
> That works but it doesn't span the width if you put a width - for that
> matter I can't seem to get width to do anything. Anyone else see
> that? What I want is to be able to given a list provide a nice fancy
> evenly spaced columnar output.
>
> search_keys Section site Employee
> JobClassCode XBoss Department LocationDesc
> cn Division Fax SectionCode
>
> It's clear pprint does not do this - Does anyone have something for
> working with lists to pretty format them?
Try this:
data = [
"this is a really long entry, longer than will fit in a single
column",
"this is another one, boy this guy really talks a lot!",
"and in conclusion, I find that more is more, except when it's not"
]
import textwrap
from itertools import izip,chain,repeat
for linetuple in izip(map(None,*[textwrap.wrap(d,15)
for d in data])):
linetuple = ("" if c is None else c for c in linetuple[0])
print "|%-15s|%-15s|%-15s|" % tuple(linetuple)
print
colwidths = [16,15,12]
fmtstring = "|" + "|".join("%%-%ds" % w for w in colwidths) + "|"
for linetuple in izip(map(None,*[textwrap.wrap(d,colwidths[i])
for i,d in enumerate(data)])):
linetuple = ("" if c is None else c for c in linetuple[0])
print fmtstring % tuple(linetuple)
Prints:
|this is a |this is another|and in |
|really long |one, boy this |conclusion, I |
|entry, longer |guy really |find that more |
|than will fit |talks a lot! |is more, except|
|in a single | |when it's not |
|column | | |
|this is a really|this is another|and in |
|long entry, |one, boy this |conclusion, |
|longer than will|guy really |I find that |
|fit in a single |talks a lot! |more is |
|column | |more, except|
| | |when it's |
| | |not |
-- Paul
More information about the Python-list
mailing list