Tabletext
Python library and command line utility to pretty-print tabular data
Install / Use
/learn @Thibauth/TabletextREADME
Tabletext
tabletext is a Python library to format (pretty-print) tabular data as text
tables. Its goal is to be as simple as possible, while allowing optional
customization of the output.
tabletext also comes with a command line utility, table which formats
its input into a table and prints it on the standard output.
Installation
tabletext is available on Pypi_ and can be installed with:
.. _Pypi: https://pypi.python.org/pypi/tabletext
.. code-block:: bash
$ pip install tabletext
Overview
Library
``tabletext`` exposes a single function, ``to_text`` which in its simplest form
takes a list of lists (or any sequence_ of sequences_) and format it as
a table. The data is assumed to be in `row-major order`_, meaning that the
outer sequence's elements are the rows of the table.
.. _row-major order: https://en.wikipedia.org/wiki/Row-major_order
.. _sequence:
.. _sequences: https://docs.python.org/2/glossary.html#term-sequence
.. code:: python
>>> from tabletext import to_text
>>> a = [["Code", "Name"],
["AD", "ANDORRA"],
["AE", "UNITED ARAB EMIRATES"],
["AF", "AFGHANISTAN"],
["AG", "ANTIGUA AND BARBUDA"]]
>>> print to_text(a)
will output the following:
.. code:: bash
┌──────┬──────────────────────┐
│ Code │ Name │
├──────┼──────────────────────┤
│ AD │ ANDORRA │
├──────┼──────────────────────┤
│ AE │ UNITED ARAB EMIRATES │
├──────┼──────────────────────┤
│ AF │ AFGHANISTAN │
├──────┼──────────────────────┤
│ AG │ ANTIGUA AND BARBUDA │
└──────┴──────────────────────┘
You can customize the output with optional arguments:
.. code:: python
>>> print to_text(a, header=True, corners="+", hor="-", ver="|",
header_corners="+", header_hor="=",
header_ver="!", formats=[">", "<"])
will output:
.. code:: bash
+======+======================+
! Code ! Name !
+======+======================+
| AD | ANDORRA |
+------+----------------------+
| AE | UNITED ARAB EMIRATES |
+------+----------------------+
| AF | AFGHANISTAN |
+------+----------------------+
| AG | ANTIGUA AND BARBUDA |
+------+----------------------+
| AI | ANGUILLA |
+------+----------------------+
See the Documentation_ section for more details about the optional arguments of
the ``to_text`` function.
Command line utility
The command line utility reads the table from its input, each line representing
a row, the row's entries being separated by \t characters (configurable),
and outputs the formatted table to the standard output:
.. code:: bash
$ df -h | tr -s ' ' \\t | cut -f1-6 | table --header
╒════════════╤══════╤══════╤═══════╤══════╤════════════════╕
│ Filesystem │ Size │ Used │ Avail │ Use% │ Mounted │
╞════════════╪══════╪══════╪═══════╪══════╪════════════════╡
│ /dev/sda2 │ 25G │ 14G │ 9.5G │ 60% │ / │
├────────────┼──────┼──────┼───────┼──────┼────────────────┤
│ dev │ 3.8G │ 0 │ 3.8G │ 0% │ /dev │
├────────────┼──────┼──────┼───────┼──────┼────────────────┤
│ run │ 3.8G │ 756K │ 3.8G │ 1% │ /run │
├────────────┼──────┼──────┼───────┼──────┼────────────────┤
│ tmpfs │ 3.8G │ 1.3M │ 3.8G │ 1% │ /dev/shm │
├────────────┼──────┼──────┼───────┼──────┼────────────────┤
│ tmpfs │ 3.8G │ 0 │ 3.8G │ 0% │ /sys/fs/cgroup │
├────────────┼──────┼──────┼───────┼──────┼────────────────┤
│ /dev/sda1 │ 511M │ 24M │ 488M │ 5% │ /boot │
├────────────┼──────┼──────┼───────┼──────┼────────────────┤
│ tmpfs │ 3.8G │ 372M │ 3.5G │ 10% │ /tmp │
├────────────┼──────┼──────┼───────┼──────┼────────────────┤
│ /dev/sda3 │ 15G │ 9.8G │ 4.2G │ 71% │ /home │
├────────────┼──────┼──────┼───────┼──────┼────────────────┤
│ /dev/sda5 │ 77G │ 46G │ 27G │ 64% │ /media/data │
├────────────┼──────┼──────┼───────┼──────┼────────────────┤
│ tmpfs │ 774M │ 16K │ 774M │ 1% │ /run/user/1000 │
└────────────┴──────┴──────┴───────┴──────┴────────────────┘
The available options can be printed with table --help and closely follow
the optional arguments of the library's to_text function as documented
here_.
.. here: documentation
Documentation
The optional arguments of the to_text function are as follows:
================== ================ ================
Argument Default Description
================== ================ ================
formats None Format strings for the entries (see
below)
padding (1, 1) Left and right padding lengths
corners "┌┬┐├┼┤└┴┘" Characters to use for the corners
hor "─" Horizontal separation character
ver "│" Vertical separation character
header False Wether or not to display the first row
as a header row
header_corners "╒╤╕╞╪╡" Characters to use for the header row
corners
header_hor "═" Horizontal separation character for the
header row
header_ver "│" Vertical separation character for the
header row
================== ================ ================
More about some options:
-
formatscan be either a single format string, in which case it will be used for all entries, or a list of format strings, one per column of the table. The format strings must follow Python'sformat specification_. Note however that you don't have to specify the width since it is automatically computed. Useful format strings are"<",">"and"^"for left-aligned, right-aligned and centered columns respectively. -
cornersandheader_cornersare strings containing the corner characters to be used for rows and the header row respectively. Follow the same order as in the default values. Alternatively, you can specify only one character (that is, a string of length 1) which will be used for all corners.
.. _format specification: https://docs.python.org/2/library/string.html#format-specification-mini-language
