All Projects → thombashi → Pytablewriter

thombashi / Pytablewriter

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

Programming Languages

javascript
184084 projects - #8 most used programming language
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Pytablewriter

Sqlitebiter
A CLI tool to convert CSV / Excel / HTML / JSON / Jupyter Notebook / LDJSON / LTSV / Markdown / SQLite / SSV / TSV / Google-Sheets to a SQLite database file.
Stars: ✭ 601 (+42.42%)
Mutual labels:  excel, json, csv, tsv, jupyter-notebook, sqlite
Sq
swiss-army knife for data
Stars: ✭ 275 (-34.83%)
Mutual labels:  excel, json, markdown, csv, tsv
Visidata
A terminal spreadsheet multitool for discovering and arranging data
Stars: ✭ 4,606 (+991.47%)
Mutual labels:  json, csv, tsv, pandas, sqlite
Py
Repository to store sample python programs for python learning
Stars: ✭ 4,154 (+884.36%)
Mutual labels:  jupyter-notebook, pandas, pandas-dataframe, numpy
Elasticsearch Dataformat
Excel/CSV/BulkJSON downloads on Elasticsearch.
Stars: ✭ 135 (-68.01%)
Mutual labels:  excel, json, csv, elasticsearch
Ditching Excel For Python
Functionalities in Excel translated to Python
Stars: ✭ 172 (-59.24%)
Mutual labels:  excel, jupyter-notebook, pandas, numpy
Data Science Projects With Python
A Case Study Approach to Successful Data Science Projects Using Python, Pandas, and Scikit-Learn
Stars: ✭ 198 (-53.08%)
Mutual labels:  jupyter-notebook, pandas, pandas-dataframe, numpy
Data Science Hacks
Data Science Hacks consists of tips, tricks to help you become a better data scientist. Data science hacks are for all - beginner to advanced. Data science hacks consist of python, jupyter notebook, pandas hacks and so on.
Stars: ✭ 273 (-35.31%)
Mutual labels:  jupyter-notebook, pandas, pandas-dataframe, numpy
Structured Text Tools
A list of command line tools for manipulating structured text data
Stars: ✭ 6,180 (+1364.45%)
Mutual labels:  json, csv, toml, tsv
Sheetjs
📗 SheetJS Community Edition -- Spreadsheet Data Toolkit
Stars: ✭ 28,479 (+6648.58%)
Mutual labels:  excel, json, csv, table
Stats Maths With Python
General statistics, mathematical programming, and numerical/scientific computing scripts and notebooks in Python
Stars: ✭ 381 (-9.72%)
Mutual labels:  jupyter-notebook, pandas, numpy
Vscode Data Preview
Data Preview 🈸 extension for importing 📤 viewing 🔎 slicing 🔪 dicing 🎲 charting 📊 & exporting 📥 large JSON array/config, YAML, Apache Arrow, Avro, Parquet & Excel data files
Stars: ✭ 245 (-41.94%)
Mutual labels:  excel, json, csv
Algorithmic-Trading
I have been deeply interested in algorithmic trading and systematic trading algorithms. This Repository contains the code of what I have learnt on the way. It starts form some basic simple statistics and will lead up to complex machine learning algorithms.
Stars: ✭ 47 (-88.86%)
Mutual labels:  numpy, pandas-dataframe, pandas
fastapi-csv
🏗️ Create APIs from CSV files within seconds, using fastapi
Stars: ✭ 46 (-89.1%)
Mutual labels:  csv, excel, table
Transformalize
Configurable Extract, Transform, and Load
Stars: ✭ 125 (-70.38%)
Mutual labels:  excel, elasticsearch, sqlite
Filecontextcore
FileContextCore is a "Database"-Provider for Entity Framework Core and adds the ability to store information in files instead of being limited to databases.
Stars: ✭ 91 (-78.44%)
Mutual labels:  excel, json, csv
data-analysis-using-python
Data Analysis Using Python: A Beginner’s Guide Featuring NYC Open Data
Stars: ✭ 81 (-80.81%)
Mutual labels:  numpy, pandas-dataframe, pandas
dbd
dbd is a database prototyping tool that enables data analysts and engineers to quickly load and transform data in SQL databases.
Stars: ✭ 30 (-92.89%)
Mutual labels:  csv, sqlite, excel
jupyterlab-spreadsheet-editor
JupyterLab spreadsheet editor for tabular data (e.g. csv, tsv)
Stars: ✭ 72 (-82.94%)
Mutual labels:  tsv, csv, excel
Python
This repository helps you understand python from the scratch.
Stars: ✭ 285 (-32.46%)
Mutual labels:  jupyter-notebook, pandas-dataframe, numpy

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

Summary

pytablewriter <https://github.com/thombashi/pytablewriter>__ is a Python library to write a table in various formats: 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/workflows/Tests/badge.svg :target: https://github.com/thombashi/pytablewriter/actions?query=workflow%3ATests :alt: Linux/macOS/Windows CI status

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

Features

  • Write a table in various formats:
    • Text formats:
      • CSV / Tab-separated values (TSV)
      • HTML / CSS
      • JSON / Line-delimited JSON(LDJSON) <https://en.wikipedia.org/wiki/JSON_streaming#Line-delimited_JSON>__
      • Labeled Tab-separated Values (LTSV) <http://ltsv.org/>__
      • LaTeX: tabular/array environment
      • Markdown: GitHub Flavored Markdown (GFM), etc.
      • MediaWiki
      • reStructuredText: Grid Tables <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#grid-tables>/Simple Tables <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#simple-tables>/CSV Table <http://docutils.sourceforge.net/docs/ref/rst/directives.html#id4>__
      • Source code (definition of a variable that represents tabular data)
        • JavaScript / NumPy <https://www.numpy.org/>__ (numpy.array <https://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html>) / Pandas <https://pandas.pydata.org/> (pandas.DataFrame <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html>__) / Python
      • Space aligned values
      • TOML <https://github.com/toml-lang/toml>__
      • YAML <https://yaml.org/>__
      • Unicode
    • Binary file formats:
      • Microsoft Excel :superscript:TM (.xlsx/.xls file format)
      • pandas.DataFrame <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html>__ pickle file
      • SQLite database
    • Application specific formats:
      • Elasticsearch <https://www.elastic.co/products/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 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 <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html>__ / pandas.Series <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html>__
    • 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
``pip install pytablewriter[toml]``, TOML
``pip install pytablewriter[theme]``, Theme plugins
``pip install pytablewriter[all]``, Install all of the optioanal 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/[email protected]/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 a margin
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:Sample Code:
    .. code-block:: python

        from pytablewriter import MarkdownTableWriter

        def main():
            writer = MarkdownTableWriter(
                table_name="write example with a margin",
                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 example with a margin
        | 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 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/[email protected]/docs/pages/examples/table_format/binary/spreadsheet/ss/excel_single.png :scale: 100% :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()
            writer.table_name = "example_table"
            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 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

    def main():
        writer = pytablewriter.JavaScriptTableWriter()
        writer.table_name = "example_table"
        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 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 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, null, "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 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()
            writer.from_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
        from pytablewriter import MarkdownTableWriter

        def main():
            writer = MarkdownTableWriter()
            writer.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 a space-separated values
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:Sample Code:
    .. code-block:: python

        from textwrap import dedent
        import pytablewriter

        def main():
            writer = pytablewriter.MarkdownTableWriter()
            writer.table_name = "ps"
            writer.from_csv(
                dedent("""\
                    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

        def main():
            writer = pytablewriter.MarkdownTableWriter()
            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 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 <https://pytablewriter.rtfd.io/en/latest/pages/reference/style.html>`__
for each column by ``column_styles`` attribute of writer classes.

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

        from pytablewriter import MarkdownTableWriter
        from pytablewriter.style import Style

        def main():
            writer = MarkdownTableWriter()
            writer.table_name = "set style by column_styles"
            writer.headers = [
                "auto align",
                "left align",
                "center align",
                "bold",
                "italic",
                "bold italic ts",
            ]
            writer.value_matrix = [
                [11, 11, 11, 11, 11, 11],
                [1234, 1234, 1234, 1234, 1234, 1234],
            ]

            # specify styles for each column
            writer.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=","),
            ]

            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 <https://github.com/thombashi/pytablewriter/tree/master/docs/pages/examples/style/output.md>`__


You can also set ``Style`` to a specific column with 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
~~~~~~~~~~~~~~
``set_theme`` method can set predefined style filters.
The following command will install themes:

::

    pip install pytablewriter[theme]

``altrow`` theme will colored rows alternatively:

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

        writer = TableWriterFactory.create_from_format_name("markdown")
        writer.headers = ["INT", "STR"]
        writer.value_matrix = [[1, "hoge"], [2, "foo"], [3, "bar"]]
        writer.margin = 1

        writer.set_theme("altrow")

        writer.write_table()

:Output:
    .. figure:: https://cdn.jsdelivr.net/gh/thombashi/[email protected]/ss/ptw-altrow-theme_example_default.png
       :scale: 100%
       :alt: https://github.com/thombashi/pytablewriter-altrow-theme/blob/master/ss/ptw-altrow-theme_example_default.png

Make tables for specific applications
---------------------------------------
Render a table on Jupyter Notebook
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
https://nbviewer.jupyter.org/github/thombashi/pytablewriter/blob/master/examples/ipynb/jupyter_notebook_example.ipynb

.. figure:: https://cdn.jsdelivr.net/gh/thombashi/[email protected]/docs/pages/examples/jupyter_notebook/ss/jupyter_notebook.png
   :scale: 100%
   :alt: https://github.com/thombashi/pytablewriter/blob/master/docs/pages/examples/jupyter_notebook/ss/jupyter_notebook.png

   Table formatting for Jupyter Notebook

Multibyte character support
-----------------------------
Write a table using multibyte character
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You can use multibyte characters as table data.
Multibyte characters also properly padded and aligned.

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

        import pytablewriter

        def main():
            writer = pytablewriter.RstSimpleTableWriter()
            writer.table_name = "生成に関するパターン"
            writer.headers = ["パターン名", "概要", "GoF", "Code Complete[1]"]
            writer.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/[email protected]/docs/pages/examples/multibyte/ss/multi_byte_char.png
       :scale: 100%
       :alt: https://github.com/thombashi/pytablewriter/blob/master/docs/pages/examples/multibyte/ss/multi_byte_char.png

       Output of multi-byte character table

Multi processing
------------------
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 to use 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.6+
- `Python package dependencies (automatically installed) <https://github.com/thombashi/pytablewriter/network/dependencies>`__


Optional dependencies
---------------------
- ``logging`` extras
    - `loguru <https://github.com/Delgan/loguru>`__: Used for logging if the package installed
- ``from`` extras
    - `pytablereader <https://github.com/thombashi/pytablereader>`__
- ``es`` extra
    - `elasticsearch <https://github.com/elastic/elasticsearch-py>`__
- ``excel`` extras
    - `xlwt <http://www.python-excel.org/>`__
    - `XlsxWriter <https://github.com/jmcnamara/XlsxWriter>`__
- ``html`` extras
    - `dominate <https://github.com/Knio/dominate/>`__
- ``sqlite`` extras
    - `SimpleSQLite <https://github.com/thombashi/SimpleSQLite>`__
- ``theme`` extras
    - `pytablewriter-altrow-theme <https://github.com/thombashi/pytablewriter-altrow-theme>`__
- ``toml`` extras
    - `toml <https://github.com/uiri/toml>`__

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

Projects using pytablewriter
==================================
- `pytest-md-report <https://github.com/thombashi/pytest-md-report>`__


Related Projects
==================================
- `pytablereader <https://github.com/thombashi/pytablereader>`__
    - Tabular data loaded by ``pytablereader`` can be written another tabular data format with ``pytablewriter``.

Sponsors
====================================
.. image:: https://avatars0.githubusercontent.com/u/44389260?s=48&u=6da7176e51ae2654bcfd22564772ef8a3bb22318&v=4
   :target: https://github.com/chasbecker
   :alt: Charles Becker (chasbecker)


`Become a sponsor <https://github.com/sponsors/thombashi>`__

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].