pytablewriter is a Python library to write a table in various formats: AsciiDoc / CSV / Elasticsearch / HTML / JavaScript / JSON / LaTeX / LDJSON / LTSV / Markdown / MediaWiki / NumPy / Excel / Pandas / Python / reStructuredText / SQLite / TOML / TSV.

thombashi thombashi Last update: Apr 03, 2024

pytablewriter

Summary

pytablewriter is a Python library to write a table in various formats: AsciiDoc / CSV / Elasticsearch / HTML / JavaScript / JSON / LaTeX / LDJSON / LTSV / Markdown / MediaWiki / NumPy / Excel / Pandas / Python / reStructuredText / SQLite / TOML / TSV / YAML.

PyPI package version

conda-forge package version

Supported Python versions

Supported Python implementations

CI status of Linux/macOS/Windows

Test coverage

CodeQL

Features

Installation

Installation: pip

pip install pytablewriter

Some of the formats require additional dependency packages, you can install these packages as follows:

Installation of optional dependencies
Installation example Remark
pip install pytablewriter[es] Elasticsearch
pip install pytablewriter[excel] Excel
pip install pytablewriter[html] HTML
pip install pytablewriter[sqlite] SQLite database
pip install pytablewriter[toml] TOML
pip install pytablewriter[theme] pytablewriter theme plugins
pip install pytablewriter[all] Install all of the optional dependencies

Installation: conda

conda install -c conda-forge pytablewriter

Installation: apt

sudo add-apt-repository ppa:thombashi/ppa
sudo apt update
sudo apt install python3-pytablewriter

Examples

Write tables

Write a Markdown table

Sample Code
Output
# example_table
|int|float|str |bool |  mix   |          time          |
|--:|----:|----|-----|-------:|------------------------|
|  0| 0.10|hoge|True |       0|2017-01-01 03:04:05+0900|
|  2|-2.23|foo |False|        |2017-12-23 12:34:51+0900|
|  3| 0.00|bar |True |Infinity|2017-03-03 22:44:55+0900|
|-10|-9.90|    |False|     NaN|2017-01-01 00:00:00+0900|
Rendering Result
Rendered markdown at GitHubRendered markdown at GitHub

Write a Markdown table with margins

Sample Code
Output
# write a table with margins
| int | float | str  | bool  |   mix    |           time           |
| --: | ----: | ---- | ----- | -------: | ------------------------ |
|   0 |  0.10 | hoge | True  |        0 | 2017-01-01 03:04:05+0900 |
|   2 | -2.23 | foo  | False |          | 2017-12-23 12:34:51+0900 |
|   3 |  0.00 | bar  | True  | Infinity | 2017-03-03 22:44:55+0900 |
| -10 | -9.90 |      | False |      NaN | 2017-01-01 00:00:00+0900 |

margin attribute can be available for all of the text format writer classes.

Write a GitHub Flavored Markdown (GFM) table

If you set flavor keyword argument of MarkdownTableWriter class to "github" or "gfm", the writer will output markdown tables with GitHub flavor. GFM can apply some additional styles to tables such as fg_color (text color).

Sample Code

Rendered results can be found at here

Apply styles to GFM table with programmatically

Applying style filters to GFM allows for more flexible style settings for cells. See also the example

Write a Markdown table to a stream or a file

Refer an example

Write a table to an Excel sheet

Sample Code
Output
Output excel file (sample_single.xlsx)Output excel file (sample_single.xlsx)

Write a Unicode table

Sample Code
Output
┌───┬─────┬────┬─────┬────────┬────────────────────────┐
│int│float│str │bool │  mix   │          time          │
├───┼─────┼────┼─────┼────────┼────────────────────────┤
│  0│ 0.10│hoge│True │       0│2017-01-01 03:04:05+0900│
├───┼─────┼────┼─────┼────────┼────────────────────────┤
│  2│-2.23│foo │False│        │2017-12-23 12:34:51+0900│
├───┼─────┼────┼─────┼────────┼────────────────────────┤
│  3│ 0.00│bar │True │Infinity│2017-03-03 22:44:55+0900│
├───┼─────┼────┼─────┼────────┼────────────────────────┤
│-10│-9.90│    │False│     NaN│2017-01-01 00:00:00+0900│
└───┴─────┴────┴─────┴────────┴────────────────────────┘

Write a table with JavaScript format (as a nested list variable definition)

Sample Code
Output

Write a Markdown table from pandas.DataFrame instance

from_dataframe method of writer classes will set up tabular data from pandas.DataFrame:

Sample Code
Output
| i | f  | c  | if |ifc|bool |  inf   |nan|mix_num |          time           |
|--:|---:|----|---:|---|-----|--------|---|-------:|-------------------------|
|  1|1.10|aa  | 1.0|  1|True |Infinity|NaN|       1|2017-01-01 00:00:00+09:00|
|  2|2.20|bbb | 2.2|2.2|False|Infinity|NaN|Infinity|2017-01-02 03:04:05+09:00|
|  3|3.33|cccc|-3.0|ccc|True |Infinity|NaN|     NaN|2017-01-01 00:00:00+09:00|

Adding a column of the DataFrame index if you specify add_index_column=True:

Sample Code
Output
# add_index_column
|   | A | B |
|---|--:|--:|
|a  |  1| 10|
|b  |  2| 11|

Write a Markdown table from space-separated values

Sample Code
Output
# ps
|USER|PID|%CPU|%MEM| VSZ |RSS |TTY|STAT|START|TIME|   COMMAND    |
|----|--:|---:|---:|----:|---:|---|----|-----|----|--------------|
|root|  1|   0| 0.4|77664|8784|?  |Ss  |May11|0:02|/sbin/init    |
|root|  2|   0| 0.0|    0|   0|?  |S   |May11|0:00|[kthreadd]    |
|root|  4|   0| 0.0|    0|   0|?  |I<  |May11|0:00|[kworker/0:0H]|
|root|  6|   0| 0.0|    0|   0|?  |I<  |May11|0:00|[mm_percpu_wq]|
|root|  7|   0| 0.0|    0|   0|?  |S   |May11|0:01|[ksoftirqd/0] |

Get rendered tabular text as str

dumps method returns rendered tabular text. dumps only available for text format writers.

Sample Code
Output
|int|float|str |bool |  mix   |          time          |
|--:|----:|----|-----|-------:|------------------------|
|  0| 0.10|hoge|True |       0|2017-01-01 03:04:05+0900|
|  2|-2.23|foo |False|        |2017-12-23 45:01:23+0900|
|  3| 0.00|bar |True |Infinity|2017-03-03 33:44:55+0900|
|-10|-9.90|    |False|     NaN|2017-01-01 00:00:00+0900|

Configure table styles

Column styles

Writers can specify Style for each column by column_styles attribute of writer classes.

Sample Code
Output
# set style by styles
|auto align|left align|center align|  bold  |italic|bold italic ts|
|---------:|----------|:----------:|-------:|-----:|-------------:|
|        11|11        |     11     |  **11**|  _11_|      _**11**_|
|      1234|1234      |    1234    |**1234**|_1234_|   _**1,234**_|

Rendering result

You can also set Style to a specific column with an index or header by using set_style method:

Sample Code
Output
# set style by column index
| A  |   B    |  C  |
|---:|:------:|----:|
|  11| **11** |   11|
|1234|**1234**|1 234|

# set style by header
| A  |  B   |  C  |
|---:|-----:|----:|
|  11|  _11_|   11|
|1234|_1234_|1 234|

Style filter

You can apply styles to specific cells by using style filters. Style filters will be written as Python functions. Examples of a style filter function and how you apply it are as follows:

Sample Code

Rendered results can be found at here

Theme

Theme <https://pytablewriter.readthedocs.io/en/latest/pages/reference/theme.html#pytablewriter.style.Theme> consists of a set of style filters. The following command will install external predefined themes:

pip install pytablewriter[theme]

Themes can be set via the constructor of the writer classes or the set_theme method. The following is an example of setting the altrow theme via the constructor. altrow theme will be colored rows alternatively:

Sample Code
Output

[theme] extras includes the following themes:

Make tables for specific applications

Render a table on Jupyter Notebook

All table writer class instances in pytablewriter can render in Jupyter Notebook. To render writers at notebook cells, you will require the dependency packages to be installed either by:

  • pip install pytablewriter[html] or
  • pip install pytablewriter[all]

Jupyter Notebook code examples can be found here:

Table rendering results of Jupyter Notebook

Table rendering results of Jupyter Notebook

Multibyte character support

Write a table using multibyte character

You can use multibyte characters as table data. Multibyte characters are also properly padded and aligned.

Sample Code
Output
Output of multi-byte character tableOutput of multi-byte character table

Multiprocessing

You can increase the number of workers to process table data via max_workers attribute of a writer. The more max_workers the less processing time when tabular data is large and the execution environment has available cores.

If you increase max_workers larger than one, recommend using main guarded as follows to avoid problems caused by multi-processing:

For more information

More examples are available at https://pytablewriter.rtfd.io/en/latest/pages/examples/index.html

Dependencies

Optional dependencies

Documentation

https://pytablewriter.rtfd.io/

Projects using pytablewriter

Related Projects

  • pytablereader
    • Tabular data loaded by pytablereader can be written another tabular data format with pytablewriter.

Sponsors

Charles Becker (chasbecker)

onetime: Arturi0

onetime: Dmitry Belyaev (b4tman)

Become a sponsor

Subscribe to our newsletter