table2string

A library to convert tables to string with full support for line breaks and formatting


Keywords
string, table, tools, converter
License
GPL-2.0
Install
pip install table2string==1.2.0

Documentation

table2string

GitHub Actions Workflow Status Publish Python Package to PyPI

PyPi Package Version Supported Python versions PyPi status PyPi downloads

Code style: black mypy checked Linting: Ruff

Convert table to string

While there are several libraries available for converting tables to strings in Python, none seemed to meet my specific requirements.

  • Line Break Support: Easily include line breaks within cells for enhanced readability.
  • Subtable Support: Easily include a table within a table for a more flexible presentation.
  • Alignment: Easily align text in a cell in any direction.
  • Emoji Integration: Effortlessly incorporate emoji characters into your tables to add visual appeal and context.

Install

PyPI

pip install -U table2string

GitHub

pip install -U git+https://github.com/EgorKhabarov/table2string.git@master

Usage example

>>> from table2string import Table, Themes, HorizontalAlignment, VerticalAlignment
>>> Table([("1", "2", "3"), ("qwe", "rty\nuio", "")], name="Table Name", column_names=("c1", "c2", "c3")).print()
+----------------+
|   Table Name   |
+-----+-----+----+
| c1  | c2  | c3 |
+-----+-----+----+
|   1 |   2 |  3 |
+-----+-----+----+
| qwe | rty |    |
|     | uio |    |
+-----+-----+----+
>>> from io import StringIO
>>> Table.from_csv(StringIO('c1,c2,c3\n1,2,3\nqwe,"rty\nuio",'), name="Table Name").print()
+----------------+
|   Table Name   |
+-----+-----+----+
| c1  | c2  | c3 |
+-----+-----+----+
|   1 |   2 |  3 |
+-----+-----+----+
| qwe | rty |    |
|     | uio |    |
+-----+-----+----+
>>> import sqlite3
>>> cursor = sqlite3.connect(":memory:").cursor().execute(
...     "CREATE TABLE data (c1 TEXT, c2 TEXT, c3 TEXT);"
... ).executemany(
...     "INSERT INTO data (c1, c2, c3) VALUES (?, ?, ?);",
...     [("1", "2", "3"), ("qwe", "rty\nuio", "")],
... ).execute(
...     "SELECT c1, c2, c3 FROM data;"
... )
>>> Table.from_db_cursor(
...     cursor,
...     name="Table Name",
...     column_names=True,
... ).print()
+----------------+
|   Table Name   |
+-----+-----+----+
| c1  | c2  | c3 |
+-----+-----+----+
|   1 |   2 |  3 |
+-----+-----+----+
| qwe | rty |    |
|     | uio |    |
+-----+-----+----+
>>> Table(
...     [("c1", Table([("1", "2"), ("3", "4")], name="SubTable"))],
...     name="Table Name",
... ).print(v_align=("-",), max_width=(2, 8))
+---------------+
|  Table Name   |
+----+----------+
|    | SubTable |
|    +-----+----+
| c1 |   1 |  2 |
|    +-----+----+
|    |   3 |  4 |
+----+-----+----+

Arguments

Argument Type Example Description
table Sequence[Sequence[Any]] [("1", "2"), ("3", "4")] A two-dimensional matrix
h_align tuple[HorizontalAlignment | str, ...] | HorizontalAlignment | str HorizontalAlignment.CENTER Allows you to align text in a cell horizontally
v_align tuple[VerticalAlignment | str, ...] | VerticalAlignment | str VerticalAlignment.MIDDLE Allows you to align text in a cell vertically
name str | None "Table Name" Table name
name_h_align HorizontalAlignment | str HorizontalAlignment.CENTER Allows you to align table name horizontally
name_v_align VerticalAlignment | str VerticalAlignment.MIDDLE Allows you to align table name vertically
column_names Sequence[str] | None ("c1", "c2", ...column_count) Sets the names for the table columns
column_names_h_align tuple[HorizontalAlignment | str, ...] | HorizontalAlignment | str HorizontalAlignment.CENTER Allows you to align column names horizontally
column_names_v_align tuple[VerticalAlignment | str, ...] | VerticalAlignment | str VerticalAlignment.MIDDLE Allows you to align column names vertically
max_width int | Tuple[int, ...] | None 120 Allows you to set the width of the entire table or individually for each column
max_height int | None 10 Specifies the maximum height for rows
maximize_height bool True Force height to be taken from max_height
line_break_symbol str "\\" Line break symbol
cell_break_symbol str "โ€ฆ" Symbol indicating the end of text when there is not enough height
sep bool | range | tuple (1, 3, 6) Handles the separators between table rows and can be either a boolean type or possess a __contains__ method
end str | None "\n" Behaves the same as print(end=)
file TextIOWrapper | None sys.stdout or io.StringIO() Behaves the same as print(file=)
theme Theme Themes.rounded_thick Allows you to set a specific theme for the table. For example, the border style
ignore_width_errors bool False Fixes errors in max_width if they exist
proportion_coefficient float 0.5 Affects the width distribution of the columns. A value of 0.0 corresponds to proportional distribution, 1.0 averages the values, and 2.0 inverts them

Text alignment

Align Example Description
"<align>" or ("<align>",) "^" or ("^",) Setting align ("^") for all columns
("<align_1>", "<align_2>") ("^", "<") Setting align_1 ("^") for the first column and align_2 ("<") for all other columns
("<align_1>", "<align_2>", "<align_3>") ("^", "<", ">") Setting align_1 ("^") for the first column and align_2 ("<") for the second and align_3 (">") for the third column

You can also use the corresponding HorizontalAlignment or VerticalAlignment type

For name_h_align and name_v_align only the str type or the corresponding HorizontalAlignment or VerticalAlignment type is valid

HorizontalAlignment

Align Description
AUTO or AUTO_AUTO or * or ** Alignment depends on the type. If this is a number and there are no line breaks in this cell, then align to the right; otherwise, align to the left.
LEFT or LEFT_LEFT or < or << All lines are left aligned
CENTER or CENTER_CENTER or ^ or ^^ All lines are center aligned
RIGHT or RIGHT_RIGHT or > or >> All lines are right aligned
LEFT_CENTER or <^ The first line is left aligned and the remaining lines are centered
LEFT_RIGHT or <> The first line is left aligned and the remaining lines are right aligned
CENTER_LEFT or ^< The first line is aligned to the center, and the remaining lines are aligned to the left of the first line.
CENTER_RIGHT or ^> The first line is aligned to the center, and the remaining lines are aligned to the right of the first line.
RIGHT_LEFT or >< The first line is right aligned and the remaining lines are left aligned
RIGHT_CENTER or >^ The first line is right aligned and the remaining lines are centered

VerticalAlignment

Align Description
TOP or ^ Text are top aligned
MIDDLE or - Text are centered
BOTTOM or _ Text are bottom aligned
Example
>>> from functools import partial
>>> sub_table_auto_func = partial(Table, [("123", "text",)], max_height=4, maximize_height=True)
>>> sub_table_func = partial(Table, [("first line\ntext",)], max_height=4, maximize_height=True)
>>> Table(
...     [
...         *(
...             [v_align, sub_table_auto_func(h_align="*", v_align=v_align)] + [
...                 sub_table_func(h_align=h_align, v_align=v_align)
...                 for h_align in ("<", ">", "^", "^<", "^>")
...             ]
...             for v_align in ("^", "-", "_")
...         )
...     ],
...     column_names=(" ", "*", "<", ">", "^", "^<", "^>"),
... ).print(max_width=(1, len("first line")+4), v_align=("-",))
+---+----------------+----------------+----------------+----------------+----------------+----------------+
|   |       *        |       <        |       >        |       ^        |       ^<       |       ^>       |
+---+-------+--------+----------------+----------------+----------------+----------------+----------------+
|   |   123 | text   | first line     |     first line |   first line   |   first line   |   first line   |
| ^ |       |        | text           |           text |      text      |   text         |         text   |
|   |       |        |                |                |                |                |                |
|   |       |        |                |                |                |                |                |
+---+-------+--------+----------------+----------------+----------------+----------------+----------------+
|   |       |        |                |                |                |                |                |
| - |   123 | text   | first line     |     first line |   first line   |   first line   |   first line   |
|   |       |        | text           |           text |      text      |   text         |         text   |
|   |       |        |                |                |                |                |                |
+---+-------+--------+----------------+----------------+----------------+----------------+----------------+
|   |       |        |                |                |                |                |                |
| _ |       |        |                |                |                |                |                |
|   |       |        | first line     |     first line |   first line   |   first line   |   first line   |
|   |   123 | text   | text           |           text |      text      |   text         |         text   |
+---+-------+--------+----------------+----------------+----------------+----------------+----------------+

Custom width and height settings

Width Example Description
<width> 10 Setting width (10) for the whole table
(<width>,) (10,) Setting width_1 (10) for all column
(<width_1>, <width_2>) (10, 20) Setting width_1 (10) for the first column and width_2 (20) for all other columns
(<width_1>, <width_2>, <width_3>) (10, 20, 30) Setting width_1 (10) for the first column and width_2 (20) for the second and width_3 (30) for the third column
Example
>>> # Width of the entire table with borders
>>> Table([(1, 12345, "example")]).print(max_width=30)
+-----+----------+-----------+
|   1 |    12345 | example   |
+-----+----------+-----------+
>>> # Width of each column individually
>>> Table([(1, 12345, "example")]).print(max_width=(10,))
+------------+------------+------------+
|          1 |      12345 | example    |
+------------+------------+------------+
>>> Table([(1, 12345, "example")]).print(max_width=(1, 8, 6))
+---+----------+--------+
| 1 |    12345 | exampl\|
|   |          | e      |
+---+----------+--------+
>>> Table([(1, 12345, "example")]).print(max_width=(1, 5, 7))
+---+-------+---------+
| 1 | 12345 | example |
+---+-------+---------+
>>> Table([("123456\n\n789000", "example")]).print(max_width=(3, 4), max_height=4)
+-----+------+
| 123\| exam\|
| 456 | ple  |
|     |      |
| 789โ€ฆ|      |
+-----+------+
>>> Table([("123456789",)]).print(max_width=(1,), max_height=1)
+---+
| 1โ€ฆ|
+---+
>>> Table([("123\n456\n789",)]).print(
...     max_width=(3,),
...     max_height=4,
...     maximize_height=True,
... )
+-----+
| 123 |
| 456 |
| 789 |
|     |
+-----+
>>> Table([("123456789",)]).print(
...     max_width=(3,),
...     max_height=4,
...     maximize_height=True,
... )
+-----+
| 123\|
| 456\|
| 789 |
|     |
+-----+

Separator settings

Separator Description
sep=True All horizontal dividers included
sep=False All horizontal dividers are disabled
sep=(1,) Only first delimiter
sep=(1, 3, 5) Only first third and fifth separator
sep=range(1, 100, 5) Delimiter every five lines first 100 lines
Example
>>> table_1 = Table([("qwe", "rty\nuio"), ("123456\n\n789000", "example")])
>>> kwargs = {
...     "max_width": (3, 4),
...     "max_height": 4,
... }
>>> table_1.print(**kwargs, sep=True)
+-----+------+
| qwe | rty  |
|     | uio  |
+-----+------+
| 123\| exam\|
| 456 | ple  |
|     |      |
| 789โ€ฆ|      |
+-----+------+
>>> table_1.print(**kwargs, sep=False)
+-----+------+
| qwe | rty  |
|     | uio  |
| 123\| exam\|
| 456 | ple  |
|     |      |
| 789โ€ฆ|      |
+-----+------+
>>> table_2 = Table([("1", "2"), ("3", "4")], name="Name")
>>> table_2.print(sep=True)
+-------+
| Name  |
+---+---+
| 1 | 2 |
+---+---+
| 3 | 4 |
+---+---+
>>> table_2.print(sep=False)
+-------+
| Name  |
+---+---+
| 1 | 2 |
| 3 | 4 |
+---+---+
>>> table_3 = Table([("1", "2"), ("3", "4"), ("5", "6"), ("7", "8")])
>>> table_3.print(sep=(1,))
+---+---+
| 1 | 2 |
+---+---+
| 3 | 4 |
| 5 | 6 |
| 7 | 8 |
+---+---+
>>> table_3.print(sep=(2,))
+---+---+
| 1 | 2 |
| 3 | 4 |
+---+---+
| 5 | 6 |
| 7 | 8 |
+---+---+
>>> table_3.print(sep=(1, 3))
+---+---+
| 1 | 2 |
+---+---+
| 3 | 4 |
| 5 | 6 |
+---+---+
| 7 | 8 |
+---+---+
>>> table_4 = Table([("1", "2"), ("3", "4"), ("5", "6"), ("7", "8")], name="Name")
>>> table_4.print(sep=(1,))
+-------+
| Name  |
+---+---+
| 1 | 2 |
+---+---+
| 3 | 4 |
| 5 | 6 |
| 7 | 8 |
+---+---+
>>> table_4.print(sep=(2,))
+-------+
| Name  |
+---+---+
| 1 | 2 |
| 3 | 4 |
+---+---+
| 5 | 6 |
| 7 | 8 |
+---+---+
>>> table_4.print(sep=(1, 3))
+-------+
| Name  |
+---+---+
| 1 | 2 |
+---+---+
| 3 | 4 |
| 5 | 6 |
+---+---+
| 7 | 8 |
+---+---+

Themes

Borders

Border types
>>> from table2string import Themes, HorizontalAlignment
>>> table = []
>>> example_table = Table([(" ", " "), (" ", " "), (" ", " ")])
>>> theme_names = (
...     ("ascii_thin", "ascii_thin_double"),
...     ("ascii_double", "ascii_double_thin"),
...     ("thin", "thin_thick"),
...     ("thin_double", "rounded_double"),
...     ("rounded", "rounded_thick"),
...     ("thick", "thick_thin"),
...     ("double", "double_thin"),
...     ("booktabs", "ascii_booktabs"),
...     ("markdown", "None"),
... )
>>> for names in theme_names:
...     table.append([])
...     for name in names:
...         string_table = example_table.stringify(
...             theme=getattr(Themes, name, Themes.ascii_thin)
...         )
...         table[-1].append(f"{name}\n{string_table}")
>>> Table(table).print(theme=Themes.thin, h_align=HorizontalAlignment.CENTER)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ascii_thin  โ”‚ ascii_thin_double โ”‚
โ”‚  +---+---+   โ”‚     +---+---+     โ”‚
โ”‚  |   |   |   โ”‚     |   |   |     โ”‚
โ”‚  +---+---+   โ”‚     +===+===+     โ”‚
โ”‚  |   |   |   โ”‚     |   |   |     โ”‚
โ”‚  +---+---+   โ”‚     +---+---+     โ”‚
โ”‚  |   |   |   โ”‚     |   |   |     โ”‚
โ”‚  +---+---+   โ”‚     +---+---+     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ascii_double โ”‚ ascii_double_thin โ”‚
โ”‚  +===+===+   โ”‚     +===+===+     โ”‚
โ”‚  โ€–   โ€–   โ€–   โ”‚     โ€–   โ€–   โ€–     โ”‚
โ”‚  +===+===+   โ”‚     +---+---+     โ”‚
โ”‚  โ€–   โ€–   โ€–   โ”‚     โ€–   โ€–   โ€–     โ”‚
โ”‚  +===+===+   โ”‚     +===+===+     โ”‚
โ”‚  โ€–   โ€–   โ€–   โ”‚     โ€–   โ€–   โ€–     โ”‚
โ”‚  +===+===+   โ”‚     +===+===+     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚     thin     โ”‚    thin_thick     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”   โ”‚     โ”Œโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”     โ”‚
โ”‚  โ”‚   โ”‚   โ”‚   โ”‚     โ”‚   โ”‚   โ”‚     โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค   โ”‚     โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”ฅ     โ”‚
โ”‚  โ”‚   โ”‚   โ”‚   โ”‚     โ”‚   โ”‚   โ”‚     โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค   โ”‚     โ”œโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค     โ”‚
โ”‚  โ”‚   โ”‚   โ”‚   โ”‚     โ”‚   โ”‚   โ”‚     โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜   โ”‚     โ””โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ thin_double  โ”‚  rounded_double   โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”   โ”‚     โ•ญโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ•ฎ     โ”‚
โ”‚  โ”‚   โ”‚   โ”‚   โ”‚     โ”‚   โ”‚   โ”‚     โ”‚
โ”‚  โ•žโ•โ•โ•โ•ชโ•โ•โ•โ•ก   โ”‚     โ•žโ•โ•โ•โ•ชโ•โ•โ•โ•ก     โ”‚
โ”‚  โ”‚   โ”‚   โ”‚   โ”‚     โ”‚   โ”‚   โ”‚     โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค   โ”‚     โ”œโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค     โ”‚
โ”‚  โ”‚   โ”‚   โ”‚   โ”‚     โ”‚   โ”‚   โ”‚     โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜   โ”‚     โ•ฐโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   rounded    โ”‚   rounded_thick   โ”‚
โ”‚  โ•ญโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ•ฎ   โ”‚     โ•ญโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ•ฎ     โ”‚
โ”‚  โ”‚   โ”‚   โ”‚   โ”‚     โ”‚   โ”‚   โ”‚     โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค   โ”‚     โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”ฅ     โ”‚
โ”‚  โ”‚   โ”‚   โ”‚   โ”‚     โ”‚   โ”‚   โ”‚     โ”‚
โ”‚  โ”œโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค   โ”‚     โ”œโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค     โ”‚
โ”‚  โ”‚   โ”‚   โ”‚   โ”‚     โ”‚   โ”‚   โ”‚     โ”‚
โ”‚  โ•ฐโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ   โ”‚     โ•ฐโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    thick     โ”‚    thick_thin     โ”‚
โ”‚  โ”โ”โ”โ”โ”ณโ”โ”โ”โ”“   โ”‚     โ”โ”โ”โ”โ”ณโ”โ”โ”โ”“     โ”‚
โ”‚  โ”ƒ   โ”ƒ   โ”ƒ   โ”‚     โ”ƒ   โ”ƒ   โ”ƒ     โ”‚
โ”‚  โ”ฃโ”โ”โ”โ•‹โ”โ”โ”โ”ซ   โ”‚     โ” โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”จ     โ”‚
โ”‚  โ”ƒ   โ”ƒ   โ”ƒ   โ”‚     โ”ƒ   โ”ƒ   โ”ƒ     โ”‚
โ”‚  โ”ฃโ”โ”โ”โ•‹โ”โ”โ”โ”ซ   โ”‚     โ”ฃโ”โ”โ”โ•‹โ”โ”โ”โ”ซ     โ”‚
โ”‚  โ”ƒ   โ”ƒ   โ”ƒ   โ”‚     โ”ƒ   โ”ƒ   โ”ƒ     โ”‚
โ”‚  โ”—โ”โ”โ”โ”ปโ”โ”โ”โ”›   โ”‚     โ”—โ”โ”โ”โ”ปโ”โ”โ”โ”›     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    double    โ”‚    double_thin    โ”‚
โ”‚  โ•”โ•โ•โ•โ•ฆโ•โ•โ•โ•—   โ”‚     โ•”โ•โ•โ•โ•ฆโ•โ•โ•โ•—     โ”‚
โ”‚  โ•‘   โ•‘   โ•‘   โ”‚     โ•‘   โ•‘   โ•‘     โ”‚
โ”‚  โ• โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ   โ”‚     โ•Ÿโ”€โ”€โ”€โ•ซโ”€โ”€โ”€โ•ข     โ”‚
โ”‚  โ•‘   โ•‘   โ•‘   โ”‚     โ•‘   โ•‘   โ•‘     โ”‚
โ”‚  โ• โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ   โ”‚     โ• โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ     โ”‚
โ”‚  โ•‘   โ•‘   โ•‘   โ”‚     โ•‘   โ•‘   โ•‘     โ”‚
โ”‚  โ•šโ•โ•โ•โ•ฉโ•โ•โ•โ•   โ”‚     โ•šโ•โ•โ•โ•ฉโ•โ•โ•โ•     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   booktabs   โ”‚  ascii_booktabs   โ”‚
โ”‚   โ”€โ”€โ”€โ”€โ”€โ”€โ”€    โ”‚      -------      โ”‚
โ”‚              โ”‚                   โ”‚
โ”‚   โ”โ”โ”โ”โ”โ”โ”    โ”‚      =======      โ”‚
โ”‚              โ”‚                   โ”‚
โ”‚   โ”€โ”€โ”€โ”€โ”€โ”€โ”€    โ”‚      -------      โ”‚
โ”‚              โ”‚                   โ”‚
โ”‚   โ”€โ”€โ”€โ”€โ”€โ”€โ”€    โ”‚      -------      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   markdown   โ”‚       None        โ”‚
โ”‚  |   |   |   โ”‚     +---+---+     โ”‚
โ”‚  |---|---|   โ”‚     |   |   |     โ”‚
โ”‚  |   |   |   โ”‚     +---+---+     โ”‚
โ”‚  |   |   |   โ”‚     |   |   |     โ”‚
โ”‚              โ”‚     +---+---+     โ”‚
โ”‚              โ”‚     |   |   |     โ”‚
โ”‚              โ”‚     +---+---+     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
Example
>>> from table2string import Table, Themes
>>> name = "Table Name"
>>> column_names = ("c1", "c2", "3")
>>> table = [("1", "2", "3"), ("qwe", "rty\nuio", "")]
>>> t = Table(table)
>>> t_name = Table(table, name=name)
>>> t_column_names = Table(table, column_names=column_names)
>>> t_name_column_names = Table(table, name=name, column_names=column_names)
Themes.ascii_thin
>>> t.print(theme=Themes.ascii_thin)
+-----+-----+---+
|   1 |   2 | 3 |
+-----+-----+---+
| qwe | rty |   |
|     | uio |   |
+-----+-----+---+
>>> t_column_names.print(theme=Themes.ascii_thin)
+-----+-----+---+
| c1  | c2  | 3 |
+-----+-----+---+
|   1 |   2 | 3 |
+-----+-----+---+
| qwe | rty |   |
|     | uio |   |
+-----+-----+---+
>>> t_name.print(theme=Themes.ascii_thin)
+---------------+
|  Table Name   |
+-----+-----+---+
|   1 |   2 | 3 |
+-----+-----+---+
| qwe | rty |   |
|     | uio |   |
+-----+-----+---+
>>> t_name_column_names.print(theme=Themes.ascii_thin)
+---------------+
|  Table Name   |
+-----+-----+---+
| c1  | c2  | 3 |
+-----+-----+---+
|   1 |   2 | 3 |
+-----+-----+---+
| qwe | rty |   |
|     | uio |   |
+-----+-----+---+
Themes.ascii_thin_double
>>> t.print(theme=Themes.ascii_thin_double)
+-----+-----+---+
|   1 |   2 | 3 |
+=====+=====+===+
| qwe | rty |   |
|     | uio |   |
+-----+-----+---+
>>> t_column_names.print(theme=Themes.ascii_thin_double)
+-----+-----+---+
| c1  | c2  | 3 |
+=====+=====+===+
|   1 |   2 | 3 |
+-----+-----+---+
| qwe | rty |   |
|     | uio |   |
+-----+-----+---+
>>> t_name.print(theme=Themes.ascii_thin_double)
+---------------+
|  Table Name   |
+-----+-----+---+
|   1 |   2 | 3 |
+=====+=====+===+
| qwe | rty |   |
|     | uio |   |
+-----+-----+---+
>>> t_name_column_names.print(theme=Themes.ascii_thin_double)
+---------------+
|  Table Name   |
+-----+-----+---+
| c1  | c2  | 3 |
+=====+=====+===+
|   1 |   2 | 3 |
+-----+-----+---+
| qwe | rty |   |
|     | uio |   |
+-----+-----+---+
Themes.ascii_double
>>> t.print(theme=Themes.ascii_double)
+=====+=====+===+
โ€–   1 โ€–   2 โ€– 3 โ€–
+=====+=====+===+
โ€– qwe โ€– rty โ€–   โ€–
โ€–     โ€– uio โ€–   โ€–
+=====+=====+===+
>>> t_column_names.print(theme=Themes.ascii_double)
+=====+=====+===+
โ€– c1  โ€– c2  โ€– 3 โ€–
+=====+=====+===+
โ€–   1 โ€–   2 โ€– 3 โ€–
+=====+=====+===+
โ€– qwe โ€– rty โ€–   โ€–
โ€–     โ€– uio โ€–   โ€–
+=====+=====+===+
>>> t_name.print(theme=Themes.ascii_double)
+===============+
โ€–  Table Name   โ€–
+=====+=====+===+
โ€–   1 โ€–   2 โ€– 3 โ€–
+=====+=====+===+
โ€– qwe โ€– rty โ€–   โ€–
โ€–     โ€– uio โ€–   โ€–
+=====+=====+===+
>>> t_name_column_names.print(theme=Themes.ascii_double)
+===============+
โ€–  Table Name   โ€–
+=====+=====+===+
โ€– c1  โ€– c2  โ€– 3 โ€–
+=====+=====+===+
โ€–   1 โ€–   2 โ€– 3 โ€–
+=====+=====+===+
โ€– qwe โ€– rty โ€–   โ€–
โ€–     โ€– uio โ€–   โ€–
+=====+=====+===+
Themes.ascii_double_thin
>>> t.print(theme=Themes.ascii_double_thin)
+=====+=====+===+
โ€–   1 โ€–   2 โ€– 3 โ€–
+-----+-----+---+
โ€– qwe โ€– rty โ€–   โ€–
โ€–     โ€– uio โ€–   โ€–
+=====+=====+===+
>>> t_column_names.print(theme=Themes.ascii_double_thin)
+=====+=====+===+
โ€– c1  โ€– c2  โ€– 3 โ€–
+-----+-----+---+
โ€–   1 โ€–   2 โ€– 3 โ€–
+=====+=====+===+
โ€– qwe โ€– rty โ€–   โ€–
โ€–     โ€– uio โ€–   โ€–
+=====+=====+===+
>>> t_name.print(theme=Themes.ascii_double_thin)
+===============+
โ€–  Table Name   โ€–
+=====+=====+===+
โ€–   1 โ€–   2 โ€– 3 โ€–
+-----+-----+---+
โ€– qwe โ€– rty โ€–   โ€–
โ€–     โ€– uio โ€–   โ€–
+=====+=====+===+
>>> t_name_column_names.print(theme=Themes.ascii_double_thin)
+===============+
โ€–  Table Name   โ€–
+=====+=====+===+
โ€– c1  โ€– c2  โ€– 3 โ€–
+-----+-----+---+
โ€–   1 โ€–   2 โ€– 3 โ€–
+=====+=====+===+
โ€– qwe โ€– rty โ€–   โ€–
โ€–     โ€– uio โ€–   โ€–
+=====+=====+===+
Themes.ascii_booktabs
>>> t.print(theme=Themes.ascii_booktabs)
 --------------- 
    1     2   3  
 =============== 
  qwe   rty      
        uio      
 --------------- 
>>> t_column_names.print(theme=Themes.ascii_booktabs)
 --------------- 
  c1    c2    3  
 =============== 
    1     2   3  
 --------------- 
  qwe   rty      
        uio      
 --------------- 
>>> t_name.print(theme=Themes.ascii_booktabs)
 --------------- 
   Table Name    
 --------------- 
    1     2   3  
 =============== 
  qwe   rty      
        uio      
 --------------- 
>>> t_name_column_names.print(theme=Themes.ascii_booktabs)
 --------------- 
   Table Name    
 --------------- 
  c1    c2    3  
 =============== 
    1     2   3  
 --------------- 
  qwe   rty      
        uio      
 --------------- 
Themes.thin
>>> t.print(theme=Themes.thin)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
>>> t_column_names.print(theme=Themes.thin)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
>>> t_name.print(theme=Themes.thin)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
>>> t_name_column_names.print(theme=Themes.thin)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
Themes.thin_thick
>>> t.print(theme=Themes.thin_thick)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”โ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”ฅ
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
>>> t_column_names.print(theme=Themes.thin_thick)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ”โ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”ฅ
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
>>> t_name.print(theme=Themes.thin_thick)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”โ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”ฅ
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
>>> t_name_column_names.print(theme=Themes.thin_thick)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ”โ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”ฅ
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
Themes.thin_double
>>> t.print(theme=Themes.thin_double)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•ก
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
>>> t_column_names.print(theme=Themes.thin_double)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•ก
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
>>> t_name.print(theme=Themes.thin_double)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•ก
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
>>> t_name_column_names.print(theme=Themes.thin_double)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•ก
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜
Themes.rounded
>>> t.print(theme=Themes.rounded)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ•ฎ
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
>>> t_column_names.print(theme=Themes.rounded)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ•ฎ
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
>>> t_name.print(theme=Themes.rounded)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
>>> t_name_column_names.print(theme=Themes.rounded)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
Themes.rounded_thick
>>> t.print(theme=Themes.rounded_thick)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ•ฎ
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”โ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”ฅ
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
>>> t_column_names.print(theme=Themes.rounded_thick)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ•ฎ
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ”โ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”ฅ
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
>>> t_name.print(theme=Themes.rounded_thick)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”โ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”ฅ
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
>>> t_name_column_names.print(theme=Themes.rounded_thick)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ”โ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”โ”โ”ฟโ”โ”โ”โ”ฅ
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
Themes.rounded_double
>>> t.print(theme=Themes.rounded_double)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ•ฎ
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•ก
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
>>> t_column_names.print(theme=Themes.rounded_double)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ•ฎ
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•ก
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
>>> t_name.print(theme=Themes.rounded_double)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•ก
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
>>> t_name_column_names.print(theme=Themes.rounded_double)
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  Table Name   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ค
โ”‚ c1  โ”‚ c2  โ”‚ 3 โ”‚
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•ก
โ”‚   1 โ”‚   2 โ”‚ 3 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ค
โ”‚ qwe โ”‚ rty โ”‚   โ”‚
โ”‚     โ”‚ uio โ”‚   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ•ฏ
Themes.thick
>>> t.print(theme=Themes.thick)
โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”“
โ”ƒ   1 โ”ƒ   2 โ”ƒ 3 โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”ซ
โ”ƒ qwe โ”ƒ rty โ”ƒ   โ”ƒ
โ”ƒ     โ”ƒ uio โ”ƒ   โ”ƒ
โ”—โ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”›
>>> t_column_names.print(theme=Themes.thick)
โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”“
โ”ƒ c1  โ”ƒ c2  โ”ƒ 3 โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”ซ
โ”ƒ   1 โ”ƒ   2 โ”ƒ 3 โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”ซ
โ”ƒ qwe โ”ƒ rty โ”ƒ   โ”ƒ
โ”ƒ     โ”ƒ uio โ”ƒ   โ”ƒ
โ”—โ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”›
>>> t_name.print(theme=Themes.thick)
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ  Table Name   โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”ซ
โ”ƒ   1 โ”ƒ   2 โ”ƒ 3 โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”ซ
โ”ƒ qwe โ”ƒ rty โ”ƒ   โ”ƒ
โ”ƒ     โ”ƒ uio โ”ƒ   โ”ƒ
โ”—โ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”›
>>> t_name_column_names.print(theme=Themes.thick)
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ  Table Name   โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”ซ
โ”ƒ c1  โ”ƒ c2  โ”ƒ 3 โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”ซ
โ”ƒ   1 โ”ƒ   2 โ”ƒ 3 โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”ซ
โ”ƒ qwe โ”ƒ rty โ”ƒ   โ”ƒ
โ”ƒ     โ”ƒ uio โ”ƒ   โ”ƒ
โ”—โ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”›
Themes.thick_thin
>>> t.print(theme=Themes.thick_thin)
โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”“
โ”ƒ   1 โ”ƒ   2 โ”ƒ 3 โ”ƒ
โ” โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”จ
โ”ƒ qwe โ”ƒ rty โ”ƒ   โ”ƒ
โ”ƒ     โ”ƒ uio โ”ƒ   โ”ƒ
โ”—โ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”›
>>> t_column_names.print(theme=Themes.thick_thin)
โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”“
โ”ƒ c1  โ”ƒ c2  โ”ƒ 3 โ”ƒ
โ” โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”จ
โ”ƒ   1 โ”ƒ   2 โ”ƒ 3 โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”ซ
โ”ƒ qwe โ”ƒ rty โ”ƒ   โ”ƒ
โ”ƒ     โ”ƒ uio โ”ƒ   โ”ƒ
โ”—โ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”›
>>> t_name.print(theme=Themes.thick_thin)
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ  Table Name   โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”ซ
โ”ƒ   1 โ”ƒ   2 โ”ƒ 3 โ”ƒ
โ” โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”จ
โ”ƒ qwe โ”ƒ rty โ”ƒ   โ”ƒ
โ”ƒ     โ”ƒ uio โ”ƒ   โ”ƒ
โ”—โ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”›
>>> t_name_column_names.print(theme=Themes.thick_thin)
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ  Table Name   โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”ซ
โ”ƒ c1  โ”ƒ c2  โ”ƒ 3 โ”ƒ
โ” โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”จ
โ”ƒ   1 โ”ƒ   2 โ”ƒ 3 โ”ƒ
โ”ฃโ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”โ”โ•‹โ”โ”โ”โ”ซ
โ”ƒ qwe โ”ƒ rty โ”ƒ   โ”ƒ
โ”ƒ     โ”ƒ uio โ”ƒ   โ”ƒ
โ”—โ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”โ”โ”ปโ”โ”โ”โ”›
Themes.double
>>> t.print(theme=Themes.double)
โ•”โ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•—
โ•‘   1 โ•‘   2 โ•‘ 3 โ•‘
โ• โ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ
โ•‘ qwe โ•‘ rty โ•‘   โ•‘
โ•‘     โ•‘ uio โ•‘   โ•‘
โ•šโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•
>>> t_column_names.print(theme=Themes.double)
โ•”โ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•—
โ•‘ c1  โ•‘ c2  โ•‘ 3 โ•‘
โ• โ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ
โ•‘   1 โ•‘   2 โ•‘ 3 โ•‘
โ• โ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ
โ•‘ qwe โ•‘ rty โ•‘   โ•‘
โ•‘     โ•‘ uio โ•‘   โ•‘
โ•šโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•
>>> t_name.print(theme=Themes.double)
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘  Table Name   โ•‘
โ• โ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•ฃ
โ•‘   1 โ•‘   2 โ•‘ 3 โ•‘
โ• โ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ
โ•‘ qwe โ•‘ rty โ•‘   โ•‘
โ•‘     โ•‘ uio โ•‘   โ•‘
โ•šโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•
>>> t_name_column_names.print(theme=Themes.double)
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘  Table Name   โ•‘
โ• โ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•ฃ
โ•‘ c1  โ•‘ c2  โ•‘ 3 โ•‘
โ• โ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ
โ•‘   1 โ•‘   2 โ•‘ 3 โ•‘
โ• โ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ
โ•‘ qwe โ•‘ rty โ•‘   โ•‘
โ•‘     โ•‘ uio โ•‘   โ•‘
โ•šโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•
Themes.double_thin
>>> t.print(theme=Themes.double_thin)
โ•”โ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•—
โ•‘   1 โ•‘   2 โ•‘ 3 โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ•ซโ”€โ”€โ”€โ”€โ”€โ•ซโ”€โ”€โ”€โ•ข
โ•‘ qwe โ•‘ rty โ•‘   โ•‘
โ•‘     โ•‘ uio โ•‘   โ•‘
โ•šโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•
>>> t_column_names.print(theme=Themes.double_thin)
โ•”โ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•—
โ•‘ c1  โ•‘ c2  โ•‘ 3 โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ•ซโ”€โ”€โ”€โ”€โ”€โ•ซโ”€โ”€โ”€โ•ข
โ•‘   1 โ•‘   2 โ•‘ 3 โ•‘
โ• โ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ
โ•‘ qwe โ•‘ rty โ•‘   โ•‘
โ•‘     โ•‘ uio โ•‘   โ•‘
โ•šโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•
>>> t_name.print(theme=Themes.double_thin)
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘  Table Name   โ•‘
โ• โ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•ฃ
โ•‘   1 โ•‘   2 โ•‘ 3 โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ•ซโ”€โ”€โ”€โ”€โ”€โ•ซโ”€โ”€โ”€โ•ข
โ•‘ qwe โ•‘ rty โ•‘   โ•‘
โ•‘     โ•‘ uio โ•‘   โ•‘
โ•šโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•
>>> t_name_column_names.print(theme=Themes.double_thin)
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘  Table Name   โ•‘
โ• โ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•ฃ
โ•‘ c1  โ•‘ c2  โ•‘ 3 โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ•ซโ”€โ”€โ”€โ”€โ”€โ•ซโ”€โ”€โ”€โ•ข
โ•‘   1 โ•‘   2 โ•‘ 3 โ•‘
โ• โ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•ฃ
โ•‘ qwe โ•‘ rty โ•‘   โ•‘
โ•‘     โ•‘ uio โ•‘   โ•‘
โ•šโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•
Themes.booktabs
>>> t.print(theme=Themes.booktabs)
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
    1     2   3  
 โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” 
  qwe   rty      
        uio      
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
>>> t_column_names.print(theme=Themes.booktabs)
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
  c1    c2    3  
 โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” 
    1     2   3  
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
  qwe   rty      
        uio      
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
>>> t_name.print(theme=Themes.booktabs)
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
   Table Name    
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
    1     2   3  
 โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” 
  qwe   rty      
        uio      
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
>>> t_name_column_names.print(theme=Themes.booktabs)
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
   Table Name    
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
  c1    c2    3  
 โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” 
    1     2   3  
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
  qwe   rty      
        uio      
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 
Themes.markdown
>>> t.print(theme=Themes.markdown)
|   1 |   2 | 3 |
|-----|-----|---|
| qwe | rty |   |
|     | uio |   |
>>> t_column_names.print(theme=Themes.markdown)
| c1  | c2  | 3 |
|-----|-----|---|
|   1 |   2 | 3 |
| qwe | rty |   |
|     | uio |   |
>>> t_name.print(theme=Themes.markdown)
|  Table Name   |
|   1 |   2 | 3 |
|-----|-----|---|
| qwe | rty |   |
|     | uio |   |
>>> t_name_column_names.print(theme=Themes.markdown)
|  Table Name   |
| c1  | c2  | 3 |
|-----|-----|---|
|   1 |   2 | 3 |
| qwe | rty |   |
|     | uio |   |

Emojis

Example
from prettytable import PrettyTable
from table2string import Table

names = ("plain text", "emoji")
table = [
    (
        "text\ntext",
        "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง\n"
        "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ\n"
        "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ‘ฏ๐Ÿ‘ฉโ€๐Ÿฆผ๐Ÿ‘ญ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ\n"
        "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง\n"
        "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ",
    ),
]
t = PrettyTable(title="prettytable", field_names=names, h_align="c")
t.add_rows(table)
print(t)

t = Table(table, name="table2string", column_names=names)
t.print(h_align="^", sep=(1,))
Windows Terminal

emoji_example_1.png

Windows 10

emoji_example_windows_10_terminal.png

Windows 11

emoji_example_windows_11_terminal.png

VT100 terminal emulator

emoji_example_VT100_terminal_emulator.png

Subtable

Example
>>> Table(
...     [
...         ("1",),
...         (Table([("2", "3")]),),
...     ]
... ).print()
+-------+
|     1 |
+---+---+
| 2 | 3 |
+---+---+
>>> Table([(
...     Table([(
...         Table([(
...             Table([(
...                 Table([(
...                     Table([(
...                         Table([(
...                             Table(
...                                 [
...                                     ("1",),
...                                     (Table([("2", "3")]),),
...                                 ]
...                             ),
...                         )]),
...                     )]),
...                 )]),
...             )]),
...         )]),
...     )]),
... )]).print()
+-------+
|     1 |
+---+---+
| 2 | 3 |
+---+---+
>>> Table(
...     [
...         (
...             "123",
...             Table(
...                 [
...                     ("456",),
...                     (Table([("789", "101")]),),
...                 ]
...             ),
...         ),
...     ]
... ).print()
+-----+-----------+
| 123 |       456 |
|     +-----+-----+
|     | 789 | 101 |
+-----+-----+-----+