Metadata-Version: 2.1 Name: pytablewriter Version: 1.2.1 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. Home-page: https://github.com/thombashi/pytablewriter Author: Tsuyoshi Hombashi Author-email: tsuyoshi.hombashi@gmail.com License: MIT License Project-URL: Changelog, https://github.com/thombashi/pytablewriter/blob/master/CHANGELOG.md Project-URL: Documentation, https://pytablewriter.rtfd.io/ Project-URL: Funding, https://github.com/sponsors/thombashi Project-URL: Source, https://github.com/thombashi/pytablewriter Project-URL: Tracker, https://github.com/thombashi/pytablewriter/issues Keywords: AsciiDoc,table,CSV,Excel,JavaScript,JSON,LaTeX,LTSV,Markdown,MediaWiki,HTML,pandas,reStructuredText,SQLite,TSV,TOML Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Information Technology Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Code Generators Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Text Processing Classifier: Topic :: Text Processing :: Markup :: HTML Classifier: Topic :: Text Processing :: Markup :: LaTeX Classifier: Topic :: Text Processing :: Markup :: Markdown Classifier: Topic :: Text Processing :: Markup :: reStructuredText Classifier: Typing :: Typed Requires-Python: >=3.9 Description-Content-Type: text/x-rst License-File: LICENSE Requires-Dist: setuptools>=38.3.0 Requires-Dist: DataProperty<2,>=1.1.0 Requires-Dist: mbstrdecoder<2,>=1.0.0 Requires-Dist: pathvalidate<4,>=2.3.0 Requires-Dist: tabledata<2,>=1.3.1 Requires-Dist: tcolorpy<1,>=0.0.5 Requires-Dist: typepy[datetime]<2,>=1.3.2 Provides-Extra: all Requires-Dist: xlwt; extra == "all" Requires-Dist: XlsxWriter<4,>=0.9.6; extra == "all" Requires-Dist: elasticsearch<9,>=8.0.1; extra == "all" Requires-Dist: pytablereader<2,>=0.31.3; extra == "all" Requires-Dist: dominate<3,>=2.1.5; extra == "all" Requires-Dist: loguru<1,>=0.4.1; extra == "all" Requires-Dist: SimpleSQLite<2,>=1.3.2; extra == "all" Requires-Dist: pytablewriter-altrow-theme<1,>=0.2.0; extra == "all" Requires-Dist: pytablewriter-altcol-theme<1,>=0.1.0; extra == "all" Requires-Dist: toml<1,>=0.9.3; extra == "all" Requires-Dist: PyYAML<7,>=3.11; extra == "all" Requires-Dist: simplejson<4,>=3.8.1; extra == "all" Requires-Dist: pandas<3,>=0.25.3; extra == "all" Provides-Extra: docs Requires-Dist: sphinx_rtd_theme>=1.2.2; extra == "docs" Requires-Dist: Sphinx>=2.4; extra == "docs" Requires-Dist: xlwt; extra == "docs" Requires-Dist: XlsxWriter<4,>=0.9.6; extra == "docs" Requires-Dist: elasticsearch<9,>=8.0.1; extra == "docs" Requires-Dist: pytablereader<2,>=0.31.3; extra == "docs" Requires-Dist: dominate<3,>=2.1.5; extra == "docs" Requires-Dist: loguru<1,>=0.4.1; extra == "docs" Requires-Dist: SimpleSQLite<2,>=1.3.2; extra == "docs" Requires-Dist: pytablewriter-altrow-theme<1,>=0.2.0; extra == "docs" Requires-Dist: pytablewriter-altcol-theme<1,>=0.1.0; extra == "docs" Requires-Dist: toml<1,>=0.9.3; extra == "docs" Requires-Dist: PyYAML<7,>=3.11; extra == "docs" Requires-Dist: simplejson<4,>=3.8.1; extra == "docs" Requires-Dist: pandas<3,>=0.25.3; extra == "docs" Provides-Extra: es Requires-Dist: elasticsearch<9,>=8.0.1; extra == "es" Provides-Extra: es8 Requires-Dist: elasticsearch<9,>=8.0.1; extra == "es8" Provides-Extra: excel Requires-Dist: xlwt; extra == "excel" Requires-Dist: XlsxWriter<4,>=0.9.6; extra == "excel" Provides-Extra: from Requires-Dist: pytablereader<2,>=0.31.3; extra == "from" Provides-Extra: html Requires-Dist: dominate<3,>=2.1.5; extra == "html" Provides-Extra: logging Requires-Dist: loguru<1,>=0.4.1; extra == "logging" Provides-Extra: pandas Requires-Dist: pandas<3,>=0.25.3; extra == "pandas" Provides-Extra: sqlite Requires-Dist: SimpleSQLite<2,>=1.3.2; extra == "sqlite" Provides-Extra: test Requires-Dist: pytest-md-report>=0.6.2; extra == "test" Requires-Dist: pytablewriter-altcol-theme<1,>=0.1.0; extra == "test" Requires-Dist: PyYAML<7,>=3.11; extra == "test" Requires-Dist: pytablereader[excel,sqlite]>=0.31.3; extra == "test" Requires-Dist: dominate<3,>=2.1.5; extra == "test" Requires-Dist: pytablewriter-altrow-theme<1,>=0.2.0; extra == "test" Requires-Dist: toml<1,>=0.9.3; extra == "test" Requires-Dist: simplejson<4,>=3.8.1; extra == "test" Requires-Dist: pytest>=6.0.1; extra == "test" Requires-Dist: beautifulsoup4>=4.10; extra == "test" Requires-Dist: SimpleSQLite<2,>=1.3.2; extra == "test" Requires-Dist: pytablereader<2,>=0.31.3; extra == "test" Requires-Dist: elasticsearch<9,>=8.0.1; extra == "test" Requires-Dist: xlwt; extra == "test" Requires-Dist: tablib>=3.2.0; extra == "test" Requires-Dist: sqliteschema>=2; extra == "test" Requires-Dist: loguru<1,>=0.4.1; extra == "test" Requires-Dist: XlsxWriter<4,>=0.9.6; extra == "test" Requires-Dist: pandas<3,>=0.25.3; extra == "test" Provides-Extra: theme Requires-Dist: pytablewriter-altrow-theme<1,>=0.2.0; extra == "theme" Requires-Dist: pytablewriter-altcol-theme<1,>=0.1.0; extra == "theme" Provides-Extra: toml Requires-Dist: toml<1,>=0.9.3; extra == "toml" Provides-Extra: yaml Requires-Dist: PyYAML<7,>=3.11; extra == "yaml" .. contents:: **pytablewriter** :backlinks: top :depth: 2 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. .. 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 `__ - CSV / Tab-separated values (TSV) / Space-separated values (SSV) - HTML / CSS - JSON / `Line-delimited JSON(LDJSON) `__ - `Labeled Tab-separated Values (LTSV) `__ - 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( table_name="example_table", 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 :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", decoration_line="underline"), ], headers=["A", "B"], value_matrix=[ ["abc", 1], ["efg", 2], ], margin=1, flavor="github", enable_ansi_escape=False, ) writer.write_table() 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 <#style-filter>`_ Write a Markdown table to a stream or a file ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Refer an example `__ 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/table_format/binary/spreadsheet/ss/excel_single.png :alt: https://github.com/thombashi/pytablewriter/blob/master/docs/pages/examples/table_format/binary/spreadsheet/ss/excel_single.png Output excel file (``sample_single.xlsx``) Write a Unicode table ~~~~~~~~~~~~~~~~~~~~~~~ :Sample Code: .. code-block:: python from pytablewriter import UnicodeTableWriter def main(): writer = UnicodeTableWriter( table_name="example_table", 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( table_name="js_variable", 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.read_csv(csv_data, 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 ``add_index_column=True``: :Sample Code: .. code-block:: python import pandas as pd import pytablewriter as ptw def main(): writer = ptw.MarkdownTableWriter(table_name="add_index_column") writer.from_dataframe( pd.DataFrame({"A": [1, 2], "B": [10, 11]}, index=["a", "b"]), add_index_column=True, ) writer.write_table() if __name__ == "__main__": main() :Output: .. code-block:: # add_index_column | | 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 [mm_percpu_wq] 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|[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: .. 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( table_name="set style by column_styles", 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(font_weight="bold"), Style(font_style="italic"), Style(font_weight="bold", font_style="italic", 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", font_weight="bold")) writer.set_style(2, Style(thousand_separator=" ")) writer.write_table() writer.write_null_line() writer.table_name = "set style by header" writer.set_style("B", Style(font_style="italic")) 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.is_header_row(): return None if cell.col == 0: return Style(font_weight="bold") value = int(cell.value) if value > 80: return Style(fg_color="red", font_weight="bold", decoration_line="underline") elif value > 50: return Style(fg_color="yellow", font_weight="bold") 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", enable_ansi_escape=False, ) writer.add_style_filter(style_filter) writer.write_table() Rendered results can be found at `here `__ 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.create_from_format_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-theme_example_default.png :alt: https://github.com/thombashi/pytablewriter-altrow-theme/blob/master/ss/ptw-altrow-theme_example_default.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 `__: .. figure:: https://cdn.jsdelivr.net/gh/thombashi/pytablewriter@master/ss/jupyter_notebook.png :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/multi_byte_char.png :alt: https://github.com/thombashi/pytablewriter/blob/master/docs/pages/examples/multibyte/ss/multi_byte_char.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.max_workers = cpu_count() ... 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.9+ - `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 `__