thombashi
pytablewriter
Python

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.

Last updated Jun 1, 2026
630
Stars
48
Forks
10
Issues
0
Stars/day
Attention Score
93
Language breakdown
Python 99.4%
Makefile 0.6%
โ–ธ Files click to expand
README

.. contents:: pytablewriter :backlinks: top :depth: 2

Summary ========= pytablewriter <https://github.com/thombashi/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.

.. image:: https://badge.fury.io/py/pytablewriter.svg :target: https://badge.fury.io/py/pytablewriter :alt: PyPI package version

.. image:: https://anaconda.org/conda-forge/pytablewriter/badges/version.svg :target: https://anaconda.org/conda-forge/pytablewriter :alt: conda-forge package version

.. image:: https://img.shields.io/pypi/pyversions/pytablewriter.svg :target: https://pypi.org/project/pytablewriter/ :alt: Supported Python versions

.. image:: https://img.shields.io/pypi/implementation/pytablewriter.svg :target: https://pypi.org/project/pytablewriter :alt: Supported Python implementations

.. image:: https://github.com/thombashi/pytablewriter/actions/workflows/ci.yml/badge.svg :target: https://github.com/thombashi/pytablewriter/actions/workflows/ci.yml :alt: CI status of Linux/macOS/Windows

.. image:: https://coveralls.io/repos/github/thombashi/pytablewriter/badge.svg?branch=master :target: https://coveralls.io/github/thombashi/pytablewriter?branch=master :alt: Test coverage

.. image:: https://github.com/thombashi/pytablewriter/actions/workflows/github-code-scanning/codeql/badge.svg :target: https://github.com/thombashi/pytablewriter/actions/workflows/github-code-scanning/codeql :alt: CodeQL

Features


  • Write a table in various formats:
- Text formats: - AsciiDoc <https://asciidoc.org/>__ - CSV / Tab-separated values (TSV) / Space-separated values (SSV) - HTML / CSS - JSON / Line-delimited JSON(LDJSON) <https://en.wikipedia.org/wiki/JSONstreaming#Line-delimitedJSON>__ - Labeled Tab-separated Values (LTSV) <http://ltsv.org/>__ - LaTeX: `tabular/array environment - Markdown: CommonMark / GitHub Flavored Markdown (GFM) / kramdown - MediaWiki __ - reStructuredText: Grid Tables /Simple Tables /CSV Table __ - Source code (definition of a variable that represents tabular data) - JavaScript / NumPy (numpy.array ) / Pandas (pandas.DataFrame ) / Python - TOML __ - YAML __ - Unicode - Binary file formats: - Microsoft Excel :superscript:TM (.xlsx/.xls file format) - pandas.DataFrame __ pickle file - SQLite __ database - Application-specific formats: - Elasticsearch __
  • Automatic table cell formatting:
- Alignment - Padding - Decimal places of numbers
  • Customize table cell styles:
- Text/Background color - Text alignment - Font size/weight - Thousand separator for numbers: e.g.
1,000/1 000
  • Configure output:
- Write a table to a stream such as a file/standard-output/string-buffer/Jupyter-Notebook - Get rendered tabular text
  • Data sources:
- nested list - CSV -
pandas.DataFrame / pandas.Series - etc.
  • Multibyte character support
  • ANSI color support
Installation ============

Installation: pip


::

pip install pytablewriter

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

.. csv-table:: Installation of optional dependencies :header: 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: .. code-block:: python

from pytablewriter import MarkdownTableWriter

def main(): writer = MarkdownTableWriter( tablename="exampletable", headers=["int", "float", "str", "bool", "mix", "time"], value_matrix=[ [0, 0.1, "hoge", True, 0, "2017-01-01 03:04:05+0900"], [2, "-2.23", "foo", False, None, "2017-12-23 45:01:23+0900"], [3, 0, "bar", "true", "inf", "2017-03-03 33:44:55+0900"], [-10, -9.9, "", "FALSE", "nan", "2017-01-01 00:00:00+0900"], ], ) writer.write_table()

if name == "main": main()

:Output: .. code-block::

# 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: .. figure:: https://cdn.jsdelivr.net/gh/thombashi/pytablewriter@master/docs/pages/examples/table_format/text/ss/markdown.png :scale: 80% :alt: https://github.com/thombashi/pytablewriter/blob/master/docs/pages/examples/table_format/text/ss/markdown.png

Rendered markdown at GitHub

Write a Markdown table with margins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :Sample Code: .. code-block:: python

from pytablewriter import MarkdownTableWriter

def main(): writer = MarkdownTableWriter( table_name="write a table with margins", headers=["int", "float", "str", "bool", "mix", "time"], value_matrix=[ [0, 0.1, "hoge", True, 0, "2017-01-01 03:04:05+0900"], [2, "-2.23", "foo", False, None, "2017-12-23 45:01:23+0900"], [3, 0, "bar", "true", "inf", "2017-03-03 33:44:55+0900"], [-10, -9.9, "", "FALSE", "nan", "2017-01-01 00:00:00+0900"], ], margin=1 # add a whitespace for both sides of each cell ) writer.write_table()

if name == "main": main()

:Output: .. code-block::

# 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: .. code-block:: python

from pytablewriter import MarkdownTableWriter from pytablewriter.style import Style

writer = MarkdownTableWriter( column_styles=[ Style(fg_color="red"), Style(fg_color="green", decorati), ], headers=["A", "B"], value_matrix=[ ["abc", 1], ["efg", 2], ], margin=1, flavor="github", enableansiescape=False, ) writer.write_table()

Rendered results can be found at here __

Programmatically applying styles to a GFM table (style filter) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Applying style filters to GFM allows for more flexible style settings for cells. See also the example <#style-filter>_

Write a Markdown table to a stream or a file ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Refer an example stream.py>_

Write a table to an Excel sheet ~~~~~~~~~ :Sample Code: .. code-block:: python

from pytablewriter import ExcelXlsxTableWriter

def main(): writer = ExcelXlsxTableWriter() writer.table_name = "example" writer.headers = ["int", "float", "str", "bool", "mix", "time"] writer.value_matrix = [ [0, 0.1, "hoge", True, 0, "2017-01-01 03:04:05+0900"], [2, "-2.23", "foo", False, None, "2017-12-23 12:34:51+0900"], [3, 0, "bar", "true", "inf", "2017-03-03 22:44:55+0900"], [-10, -9.9, "", "FALSE", "nan", "2017-01-01 00:00:00+0900"], ] writer.dump("sample.xlsx")

if name == "main": main()

:Output: .. figure:: https://cdn.jsdelivr.net/gh/thombashi/pytablewriter@master/docs/pages/examples/tableformat/binary/spreadsheet/ss/excelsingle.png :scale: 100% :alt: https://github.com/thombashi/pytablewriter/blob/master/docs/pages/examples/tableformat/binary/spreadsheet/ss/excelsingle.png

Output excel file (sample_single.xlsx)

Write a Unicode table ~~~~~~~ :Sample Code: .. code-block:: python

from pytablewriter import UnicodeTableWriter

def main(): writer = UnicodeTableWriter( tablename="exampletable", headers=["int", "float", "str", "bool", "mix", "time"], value_matrix=[ [0, 0.1, "hoge", True, 0, "2017-01-01 03:04:05+0900"], [2, "-2.23", "foo", False, None, "2017-12-23 45:01:23+0900"], [3, 0, "bar", "true", "inf", "2017-03-03 33:44:55+0900"], [-10, -9.9, "", "FALSE", "nan", "2017-01-01 00:00:00+0900"], ] ) writer.write_table()

if name == "main": main()

:Output: .. code-block::

โ”Œโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚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: .. code-block:: python

import pytablewriter as ptw

def main(): writer = ptw.JavaScriptTableWriter( tablename="jsvariable", headers=["int", "float", "str", "bool", "mix", "time"], value_matrix=[ [0, 0.1, "hoge", True, 0, "2017-01-01 03:04:05+0900"], [2, "-2.23", "foo", False, None, "2017-12-23 45:01:23+0900"], [3, 0, "bar", "true", "inf", "2017-03-03 33:44:55+0900"], [-10, -9.9, "", "FALSE", "nan", "2017-01-01 00:00:00+0900"], ], )

writer.write_table()

if name == "main": main()

:Output: .. code-block:: js

const js_variable = [ ["int", "float", "str", "bool", "mix", "time"], [0, 0.1, "hoge", true, 0, "2017-01-01 03:04:05+0900"], [2, -2.23, "foo", false, null, "2017-12-23 45:01:23+0900"], [3, 0, "bar", true, Infinity, "2017-03-03 33:44:55+0900"], [-10, -9.9, "", "FALSE", NaN, "2017-01-01 00:00:00+0900"] ];

Write a Markdown table from pandas.DataFrame instance ~~~~~~~~~~~~~~~ from_dataframe method of writer classes will set up tabular data from pandas.DataFrame:

:Sample Code: .. code-block:: python

from textwrap import dedent import pandas as pd import io from pytablewriter import MarkdownTableWriter

def main(): csv_data = io.StringIO(dedent("""\ "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" """)) df = pd.readcsv(csvdata, sep=',')

writer = MarkdownTableWriter(dataframe=df) writer.write_table()

if name == "main": main()

:Output: .. code-block::

| 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 addindexcolumn=True:

:Sample Code: .. code-block:: python

import pandas as pd import pytablewriter as ptw

def main(): writer = ptw.MarkdownTableWriter(tablename="addindex_column") writer.from_dataframe( pd.DataFrame({"A": [1, 2], "B": [10, 11]}, index=["a", "b"]), addindexcolumn=True, ) writer.write_table()

if name == "main": main()

:Output: .. code-block::

# addindexcolumn | | A | B | |---|--:|--:| |a | 1| 10| |b | 2| 11|

Write a Markdown table from space-separated values ~~~~~~~~~~~~ :Sample Code: .. code-block:: python

import pytablewriter as ptw

def main(): writer = ptw.MarkdownTableWriter(table_name="ps") writer.from_csv( """ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.4 77664 8784 ? Ss May11 0:02 /sbin/init root 2 0.0 0.0 0 0 ? S May11 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? I< May11 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? I< May11 0:00 [mmpercpuwq] root 7 0.0 0.0 0 0 ? S May11 0:01 [ksoftirqd/0] """, delimiter=" ", ) writer.write_table()

if name == "main": main()

:Output: .. code-block::

# 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|[mmpercpuwq]| |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: .. code-block:: python

import pytablewriter as ptw

def main(): writer = ptw.MarkdownTableWriter( headers=["int", "float", "str", "bool", "mix", "time"], value_matrix=[ [0, 0.1, "hoge", True, 0, "2017-01-01 03:04:05+0900"], [2, "-2.23", "foo", False, None, "2017-12-23 45:01:23+0900"], [3, 0, "bar", "true", "inf", "2017-03-03 33:44:55+0900"], [-10, -9.9, "", "FALSE", "nan", "2017-01-01 00:00:00+0900"], ], )

print(writer.dumps())

if name == "main": main()

:Output: .. code-block::

|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: .. code-block:: python

import pytablewriter as ptw from pytablewriter.style import Style

def main(): writer = ptw.MarkdownTableWriter( tablename="set style by columnstyles", headers=[ "auto align", "left align", "center align", "bold", "italic", "bold italic ts", ], value_matrix=[ [11, 11, 11, 11, 11, 11], [1234, 1234, 1234, 1234, 1234, 1234], ], column_styles=[ Style(), Style(align="left"), Style(align="center"), Style(f), Style(f), Style(f, f, thousand_separator=","), ], # specify styles for each column ) writer.write_table()

if name == "main": main()

:Output: .. code-block::

# 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: .. code-block:: python

from pytablewriter import MarkdownTableWriter from pytablewriter.style import Style

def main(): writer = MarkdownTableWriter() writer.headers = ["A", "B", "C",] writer.value_matrix = [[11, 11, 11], [1234, 1234, 1234]]

writer.table_name = "set style by column index" writer.set_style(1, Style(align="center", f)) writer.setstyle(2, Style(thousandseparator=" ")) writer.write_table() writer.writenullline()

writer.table_name = "set style by header" writer.set_style("B", Style(f)) writer.write_table()

if name == "main": main()

:Output: .. code-block::

# 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: .. code-block:: python

from typing import Any, Optional

from pytablewriter import MarkdownTableWriter from pytablewriter.style import Cell, Style

def style_filter(cell: Cell, **kwargs: Any) -> Optional[Style]: if cell.isheaderrow(): return None

if cell.col == 0: return Style(f)

value = int(cell.value)

if value > 80: return Style(fg_color="red", f, decorati) elif value > 50: return Style(fg_color="yellow", f) elif value > 20: return Style(fg_color="green")

return Style(fg_color="lightblue")

writer = MarkdownTableWriter( table_name="style filter example", headers=["Key", "Value 1", "Value 2"], value_matrix=[ ["A", 95, 40], ["B", 55, 5], ["C", 30, 85], ["D", 0, 69], ], flavor="github", enableansiescape=False, ) writer.addstylefilter(style_filter) writer.write_table()

Rendered results can be found at here filter.md>_

Theme ~~~ 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: .. code-block:: python

import pytablewriter as ptw

writer = ptw.TableWriterFactory.createfromformat_name( "markdown", headers=["INT", "STR"], value_matrix=[[1, "hoge"], [2, "foo"], [3, "bar"]], margin=1, theme="altrow", ) writer.write_table()

:Output: .. figure:: https://cdn.jsdelivr.net/gh/thombashi/pytablewriter-altrow-theme@master/ss/ptw-altrow-themeexampledefault.png :scale: 100% :alt: https://github.com/thombashi/pytablewriter-altrow-theme/blob/master/ss/ptw-altrow-themeexampledefault.png

[theme] extras includes the following themes:

  • pytablewriter-altrow-theme __
- Generated HTML table example __
  • pytablewriter-altcol-theme __
- Generated HTML table example __

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 notebookexample.ipynb>__:

.. figure:: https://cdn.jsdelivr.net/gh/thombashi/pytablewriter@master/ss/jupyter_notebook.png :scale: 100% :alt: https://github.com/thombashi/pytablewriter/blob/master/ss/jupyter_notebook.png

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: .. code-block:: python

import pytablewriter as ptw

def main(): writer = ptw.RstSimpleTableWriter( table_name="็”Ÿๆˆใซ้–ขใ™ใ‚‹ใƒ‘ใ‚ฟใƒผใƒณ", headers=["ใƒ‘ใ‚ฟใƒผใƒณๅ", "ๆฆ‚่ฆ", "GoF", "Code Complete[1]"], value_matrix=[ ["Abstract Factory", "้–ข้€ฃใ™ใ‚‹ไธ€้€ฃใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็Šถๆณใซๅฟœใ˜ใฆใ€้ฉๅˆ‡ใซ็”Ÿๆˆใ™ใ‚‹ๆ–นๆณ•ใ‚’ๆไพ›ใ™ใ‚‹ใ€‚", "Yes", "Yes"], ["Builder", "่ค‡ๅˆๅŒ–ใ•ใ‚ŒใŸใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎ็”Ÿๆˆ้Ž็จ‹ใ‚’้š ่”ฝใ™ใ‚‹ใ€‚", "Yes", "No"], ["Factory Method", "ๅฎŸ้š›ใซ็”Ÿๆˆใ•ใ‚Œใ‚‹ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใซไพๅญ˜ใ—ใชใ„ใ€ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎ็”Ÿๆˆๆ–นๆณ•ใ‚’ๆไพ›ใ™ใ‚‹ใ€‚", "Yes", "Yes"], ["Prototype", "ๅŒๆง˜ใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็”Ÿๆˆใ™ใ‚‹ใŸใ‚ใซใ€ๅŽŸๅž‹ใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’่ค‡่ฃฝใ™ใ‚‹ใ€‚", "Yes", "No"], ["Singleton", "ใ‚ใ‚‹ใ‚ฏใƒฉใ‚นใซใคใ„ใฆใ€ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใŒๅ˜ไธ€ใงใ‚ใ‚‹ใ“ใจใ‚’ไฟ่จผใ™ใ‚‹ใ€‚", "Yes", "Yes"], ], ) writer.write_table()

if name == "main": main()

:Output: .. figure:: https://cdn.jsdelivr.net/gh/thombashi/pytablewriter@master/docs/pages/examples/multibyte/ss/multibytechar.png :scale: 100% :alt: https://github.com/thombashi/pytablewriter/blob/master/docs/pages/examples/multibyte/ss/multibytechar.png

Output 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:

.. code-block:: python

from multiprocessing import cpu_count import pytablewriter as ptw

def main(): writer = ptw.MarkdownTableWriter() writer.maxworkers = cpucount() ...

if name == "main": main()

For more information


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

Dependencies ============

  • Python 3.10+
  • Python package dependencies (automatically installed) __

Optional dependencies


  • logging extras
- loguru __: Used for logging if the package installed
  • from extras
- pytablereader __
  • es extra
- elasticsearch __
  • excel extras
- xlwt __ - XlsxWriter __
  • html extras
- dominate __
  • sqlite extras
- SimpleSQLite __
  • theme extras
- pytablewriter-altrow-theme __ - pytablewriter-altcol-theme __
  • toml extras
- toml __

Documentation =============== https://pytablewriter.rtfd.io/

Projects using pytablewriter ==================================

  • pytest-md-report __

Related Projects ==================================

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

Sponsors ==================================== |chasbecker| |shiguredo| |b4tman| |Arturi0| |github|

.. |chasbecker| image:: https://avatars.githubusercontent.com/u/44389260?s=48&u=6da7176e51ae2654bcfd22564772ef8a3bb22318&v=4 :target: https://github.com/chasbecker :alt: ex-sponsor: Charles Becker (chasbecker) .. |shiguredo| image:: https://avatars.githubusercontent.com/u/2549434?s=48&v=4 :target: https://github.com/shiguredo :alt: ex-sponsor: ๆ™‚้›จๅ ‚ (shiguredo) .. |b4tman| image:: https://avatars.githubusercontent.com/u/3658062?s=48&v=4 :target: https://github.com/b4tman :alt: onetime: Dmitry Belyaev (b4tman) .. |Arturi0| image:: https://avatars.githubusercontent.com/u/46711571?s=48&u=57687c0e02d5d6e8eeaf9177f7b7af4c9f275eb5&v=4 :target: https://github.com/Arturi0 :alt: onetime: Arturi0 .. |github| image:: https://avatars.githubusercontent.com/u/9919?s=48&v=4 :target: https://github.com/github :alt: onetime: GitHub (github)

Become a sponsor `__

๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท thombashi/pytablewriter ยท Updated daily from GitHub