align on char

John Hunter jdhunter at
Mon Jun 21 19:07:10 CEST 2004

>>>>> "Peter" == Peter Otten <__peter__ at> writes:

    Peter> I think you are cheating. You don't know maxa until the
    Peter> loop has finished.

Thanks to all who replied; I took a composite of all the suggestions
to produce

def alignon(lines, c):
    lines is a list of strings, all of which contain c.  Return a new
    list of strings aligned on c

    If line does not contain alignment char c, a ValueError is raised
    width = 0
    ab = []
    for line in lines:
        tup= line.split(':',1)
        if len(tup) !=2:
            raise ValueError('Line "%s" does not contain char "%c"' %(line, c))
	width = max(width, len(tup[0]))
    return ["%-*s:%s" % (width, a, b) for a, b in ab]

lines = (
  'user1 : John Hunter',
  'another user : Bill Bragg',
  'yet more : Hi There',


for line in alignon(lines, ':'):
    print line

More information about the Python-list mailing list