I have been using texttable and blessed a lot for building stylized ASCII tables. Recently, I published my code as a python package that combines these two modules for building colorful foormatted ASCII tables.
Installing the package
pip install blessedtable
Getting started
Inializing the table with default parameters will print the a table without any formatting. To know more about structuring the ascii table follow this link
from blessedtable import Blessedtable
table = Blessedtable()
table.set_deco(15)
table.set_cols_align(["l", "r", "c"])
table.set_cols_valign(["t", "m", "b"])
table.add_rows([["Name", "Age", "Nickname"],
["Mr\nXavier\nHuon", 32, "Xav'"],
["Mr\nBaptiste\nClement", 1, "Baby"],
["Mme\nLouise\nBourgeau", 28, "Lou\n\nLoue"]])
print(table.draw())
For styling blessedtable
uses three parameters over textable
. These are border_format, header_format, and column_format
.
border_format
needs to be eitherNone
, or of typestr
header_format
needs to be eitherNone
, or of typestr
, or alist
of strings
column_format
needs to be eitherNone
, or of typestr
, or alist
of strings
Note: The strings should be formatting strings. Examples are given below.
'normal_on_normal' # text and background both have default color
'red' # text color is red, background has default color
'red_on_white' # text color is red, background is white
'italic_red_on_blue' # text italic and red, and background is white
All the color names should be by name; all the color names can be found here. To know more about blessed's formatting, follow this link
The three parameters can be set either while initializing or using setters.
table = Blessedtable(header_format='green_on_blue', border_format='blue', column_format='blue_on_rosybrown2')
#or
table = Blessedtable()
table.set_deco(15)
table.set_cols_align(["l", "r", "c"])
table.set_cols_valign(["t", "m", "b"])
table.add_rows([["Name", "Age", "Nickname"],
["Mr\nXavier\nHuon", 32, "Xav'"],
["Mr\nBaptiste\nClement", 1, "Baby"],
["Mme\nLouise\nBourgeau", 28, "Lou\n\nLoue"]])
table.header_format = 'green_on_blue'
table.border_format = 'blue'
table.column_format = 'blue_on_rosybrown2'
print(table.draw())
To achieve different colors for the columns for both header and the rows, pass a list having format strings corresponding to each of the columns.
Note: The number of elements in the list should be equal to the number of columns in a row; each element (format string) correspomds to successive columns. If header_format
is None
then it inherits the column_format
and vice versa. If you don't want it to inherit the styles, set the header_format
or column_format
to "normal_on_normal"
hf = ['green', 'italic_blue', 'purple']
cf = ['white_on_green', 'italic_orange_on_blue', 'teal']
table.header_format = hf
table.border_format = 'yellow'
table.column_format = cf
print(table.draw())
Play with it and let me know what you think in the comments!
The code is hosted on github.
Top comments (0)