Structured writing to console, such as a table

Bob Gailer bgailer at alum.rpi.edu
Tue Sep 2 03:19:20 CEST 2003


At 02:37 PM 9/1/2003 -0500, Raaijmakers, Vincent (IndSys, GE Interlogix) wrote:

>Ok, perhaps a question on a newbie level.
>
>I try to create a simple 'write to a console application' where all the 
>items in a string
>do have a variable size:
>items = ["a", "bbbbbbbbb", "cc"]
>Well, actually, I need to print a table as simple text, nice lined up in a 
>console.
>So:
>
>
>Item:       Value:     Another Value:
>----------+----------+------------------
>a         | 1        | 2
>bbbbbbbbb | 2        | 17
>cc        | 3        | 5
>
>My hope was that somewhere in python land an existing module was waiting 
>for me.
>A module that also prints lines, headers....
>
>Unfortunately, I can't find it. Books, Google...
>Before I reinvent this wheel... please give me some tips, references, 
>examples...

In addition to other responses, consider this which uses nested % 
formatting to make format strings for reuse:

class Table:
   seps = '- +|'
   def __init__(self, *columnWidths):
     if columnWidths:
       self.setWidths(columnWidths)
   def setWidths(self, columnWidths):
     self.columnWidths = columnWidths
     format1 = ("%%%%-%ss%%s"*len(columnWidths))[:-3]
     format2 = format1 % columnWidths
     self.nSeps = len(columnWidths) - 1
     self.hdrFormat = format2 % ((self.seps[1], )*self.nSeps)
     self.sepFormat = format2 % ((self.seps[2], )*self.nSeps)
     self.rowFormat = format2 % ((self.seps[3], )*self.nSeps)
   def printHdr(self, *heading):
     print self.hdrFormat % heading
   def printSep(self):
     print self.sepFormat % tuple([self.seps[0]*w for w in self.columnWidths])
   def printRow(self, *items):
     print self.rowFormat % items
print

tbl = Table(12, 12, 16)
tbl.printHdr('Item:', 'Value:', 'Another Value:')
tbl.printSep()
tbl.printRow('a', 1, 2)
tbl.printRow('bbbbbbb', 2, 17)
tbl.printRow('cc', 3, 5)


Bob Gailer
bgailer at alum.rpi.edu
303 442 2625
-------------- next part --------------

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.506 / Virus Database: 303 - Release Date: 8/1/2003


More information about the Python-list mailing list