Convert 2D Python lists into Unicode/ASCII tables
Project description
table2ascii
An intuitive and type-safe library for converting 2D Python lists to fancy ASCII/Unicode tables
Documentation and examples are available at table2ascii.rtfd.io
๐ฅ Installation
pip install -U table2ascii
Requirements: Python 3.7+
๐งโ๐ป Usage
๐ Convert lists to ASCII tables
from table2ascii import table2ascii
output = table2ascii(
header=["#", "G", "H", "R", "S"],
body=[["1", "30", "40", "35", "30"], ["2", "30", "40", "35", "30"]],
footer=["SUM", "130", "140", "135", "130"],
)
print(output)
"""
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ # G H R S โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโข
โ 1 30 40 35 30 โ
โ 2 30 40 35 30 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโข
โ SUM 130 140 135 130 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
"""
๐ Set first or last column headings
from table2ascii import table2ascii
output = table2ascii(
body=[["Assignment", "30", "40", "35", "30"], ["Bonus", "10", "20", "5", "10"]],
first_col_heading=True,
)
print(output)
"""
โโโโโโโโโโโโโโฆโโโโโโโโโโโโโโโโโโโโ
โ Assignment โ 30 40 35 30 โ
โ Bonus โ 10 20 5 10 โ
โโโโโโโโโโโโโโฉโโโโโโโโโโโโโโโโโโโโ
"""
๐ฐ Set column widths and alignments
from table2ascii import table2ascii, Alignment
output = table2ascii(
header=["#", "G", "H", "R", "S"],
body=[["1", "30", "40", "35", "30"], ["2", "30", "40", "35", "30"]],
first_col_heading=True,
column_widths=[5, 5, 5, 5, 5],
alignments=[Alignment.LEFT] + [Alignment.RIGHT] * 4,
)
print(output)
"""
โโโโโโโฆโโโโโโโโโโโโโโโโโโโโโโโโ
โ # โ G H R S โ
โโโโโโโซโโโโโโโโโโโโโโโโโโโโโโโโข
โ 1 โ 30 40 35 30 โ
โ 2 โ 30 40 35 30 โ
โโโโโโโฉโโโโโโโโโโโโโโโโโโโโโโโโ
"""
๐จ Use a preset style
See a list of 30+ preset styles here.
from table2ascii import table2ascii, Alignment, PresetStyle
output = table2ascii(
header=["First", "Second", "Third", "Fourth"],
body=[["10", "30", "40", "35"], ["20", "10", "20", "5"]],
column_widths=[10, 10, 10, 10],
style=PresetStyle.ascii_box
)
print(output)
"""
+----------+----------+----------+----------+
| First | Second | Third | Fourth |
+----------+----------+----------+----------+
| 10 | 30 | 40 | 35 |
+----------+----------+----------+----------+
| 20 | 10 | 20 | 5 |
+----------+----------+----------+----------+
"""
output = table2ascii(
header=["First", "Second", "Third", "Fourth"],
body=[["10", "30", "40", "35"], ["20", "10", "20", "5"]],
style=PresetStyle.plain,
cell_padding=0,
alignments=[Alignment.LEFT] * 4,
)
print(output)
"""
First Second Third Fourth
10 30 40 35
20 10 20 5
"""
๐ฒ Define a custom style
Check TableStyle
for more info and PresetStyle
for examples.
from table2ascii import table2ascii, TableStyle
my_style = TableStyle.from_string("*-..*||:+-+:+ *''*")
output = table2ascii(
header=["First", "Second", "Third"],
body=[["10", "30", "40"], ["20", "10", "20"], ["30", "20", "30"]],
style=my_style
)
print(output)
"""
*-------.--------.-------*
| First : Second : Third |
+-------:--------:-------+
| 10 : 30 : 40 |
| 20 : 10 : 20 |
| 30 : 20 : 30 |
*-------'--------'-------*
"""
๐ช Merge adjacent cells
from table2ascii import table2ascii, Merge, PresetStyle
output = table2ascii(
header=["#", "G", "Merge", Merge.LEFT, "S"],
body=[
[1, 5, 6, 200, Merge.LEFT],
[2, "E", "Long cell", Merge.LEFT, Merge.LEFT],
["Bonus", Merge.LEFT, Merge.LEFT, "F", "G"],
],
footer=["SUM", "100", "200", Merge.LEFT, "300"],
style=PresetStyle.double_thin_box,
first_col_heading=True,
)
print(output)
"""
โโโโโโโฆโโโโโโคโโโโโโโโคโโโโโโ
โ # โ G โ Merge โ S โ
โ โโโโโโฌโโโโโโชโโโโคโโโโงโโโโโโฃ
โ 1 โ 5 โ 6 โ 200 โ
โโโโโโโซโโโโโโผโโโโดโโโโโโโโโโข
โ 2 โ E โ Long cell โ
โโโโโโโจโโโโโโดโโโโฌโโโโฌโโโโโโข
โ Bonus โ F โ G โ
โ โโโโโโฆโโโโโโคโโโโงโโโโชโโโโโโฃ
โ SUM โ 100 โ 200 โ 300 โ
โโโโโโโฉโโโโโโงโโโโโโโโงโโโโโโ
"""
โ๏ธ Options
All parameters are optional. At least one of header
, body
, and footer
must be provided.
Refer to the documentation for more information.
Option | Type | Default | Description |
---|---|---|---|
header |
Sequence[SupportsStr] |
None |
First table row seperated by header row separator. Values should support str() |
body |
Sequence[Sequence[Sequence]] |
None |
2D List of rows for the main section of the table. Values should support str() |
footer |
Sequence[Sequence] |
None |
Last table row seperated by header row separator. Values should support str() |
column_widths |
Sequence[Optional[int]] |
None (automatic) |
List of column widths in characters for each column |
alignments |
Sequence[Alignment] |
None (all centered) |
Column alignments (ex. [Alignment.LEFT, Alignment.CENTER, Alignment.RIGHT] ) |
style |
TableStyle |
double_thin_compact |
Table style to use for the table* |
first_col_heading |
bool |
False |
Whether to add a heading column separator after the first column |
last_col_heading |
bool |
False |
Whether to add a heading column separator before the last column |
cell_padding |
int |
1 |
The minimum number of spaces to add between the cell content and the cell border |
use_wcwidth |
bool |
True |
Whether to use wcwidth instead of len() to calculate cell width |
*See a list of all preset styles here.
See the API Reference for more info.
๐จโ๐จ Use cases
๐จ๏ธ Discord messages and embeds
- Display tables nicely inside markdown code blocks on Discord
- Useful for making Discord bots with Discord.py
๐ป Terminal outputs
- Tables display nicely whenever monospace fonts are fully supported
- Tables make terminal outputs look more professional
๐ค Contributing
Contributions are welcome!
See CONTRIBUTING.md for more details on how to get involved.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.