Skip to content

mousefad/python-vegetable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Format tabular data in various ways with explicitly defined columns that can each have their own expected types, formatting and highlighting.

Features

  • Specify columns with data types / widths, formatting functions, null-value indicators and processing exception indicators.
  • Auto-sizing columns when presented with a full table of data.
  • Ability to format individual rows for output before all data has been gathered.
  • Quick switching of output formats between tabular text, JSON, YAML & delimited fields.
  • Value highlighting rules: by ranges, trends, min/max and others.

Quick Start

# pip install vegetable first
from vegetable import Table

t = Table()
t.column("Supplier")
t.column("Cost", type=float)
t.row(["Convenience store", 12.99])
t.row(["Wholesaler", "10.29"])
t.row(["Internet store", 11.56])
t.row(["Dodgy pub geezer", 5.00])
print(t)

Manual Installation From Repo

$ git clone https://github.com/mousefad/python-vegetable vegetable
$ cd vegetable
$ python -m venv .
$ . bin/activate
$ pip install --upgrade pip
$ pip install .
$ export PYTHONPATH="$PYTHONPATH:$PWD"

To run examples/network_traffic you may also need to pip install click.

Complete Data Mode

Values can be added to a Table() instace directly row-by-row with row(). When __str__() is invoked, the whole table will be formatted and returned. An advantage of this approach is that column widths will be automatically re-sized if needed (for columns where expand=True was used on column creation).

The output format can also be easily switched:

t = Table()
t.column("Name")
t.column("Hobby")
t.row(["'Bob'", "Just having a whale of a time."])
t.row(["Stang, "Monsterism."])
print(t, end="\n\n")
t.formatter = YamlFormat()
print(t)

Line-by-Line Mode

In applications where we want to print data as it is gathered, we can get string values for the table headers, separators and rows with header_str(), separator_str() mast_head() and row_str(...) functions:

t = Table()
t.column("Item Desc")
t.column("Qty", type=int)
print(t.mast_head())
for desc, num in gather_data():
    print(t.row_str([desc, num]))

TODO

  • Better unit test coverage
  • Multi-column sorting

About

Format tabular data with formatting and highlighting options.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages