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=["Product", "Category", "Price", "Rating"],
body=[
["Milk", "Dairy", "$2.99", "6.283"],
["Cheese", "Dairy", "$10.99", "8.2"],
["Apples", "Produce", "$0.99", "10.00"],
],
column_widths=[12, 12, 12, 12],
alignments=[Alignment.LEFT, Alignment.CENTER, Alignment.RIGHT, Alignment.DECIMAL],
)
print(output)
"""
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Product Category Price Rating โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโข
โ Milk Dairy $2.99 6.283 โ
โ Cheese Dairy $10.99 8.2 โ
โ Apples Produce $0.99 10.00 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
"""
๐จ 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,
)
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 | Supported Types | Description |
---|---|---|
header |
Sequence[SupportsStr] , None (Default: None ) |
First table row seperated by header row separator. Values should support str() |
body |
Sequence[Sequence[SupportsStr]] , None (Default: None ) |
2D List of rows for the main section of the table. Values should support str() |
footer |
Sequence[SupportsStr] , None (Default: None ) |
Last table row seperated by header row separator. Values should support str() |
column_widths |
Sequence[Optional[int]] , None (Default: None / automatic) |
List of column widths in characters for each column |
alignments |
Sequence[Alignment] , Alignment , None (Default: None / all centered) |
Column alignments (ex. [Alignment.LEFT, Alignment.CENTER, Alignment.RIGHT, Alignment.DECIMAL] ) |
number_alignments |
Sequence[Alignment] , Alignment , None (Default: None ) |
Column alignments for numeric values. alignments will be used if not specified. |
style |
TableStyle (Default: double_thin_compact ) |
Table style to use for the table* |
first_col_heading |
bool (Default: False ) |
Whether to add a heading column separator after the first column |
last_col_heading |
bool (Default: False ) |
Whether to add a heading column separator before the last column |
cell_padding |
int (Default: 1 ) |
The minimum number of spaces to add between the cell content and the cell border |
use_wcwidth |
bool (Default: 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.
Source Distribution
File details
Details for the file table2ascii-1.1.3.tar.gz
.
File metadata
- Download URL: table2ascii-1.1.3.tar.gz
- Upload date:
- Size: 28.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9e28a6b34d6d83ecfa317dd2e8831b185f01cc3c4284c0c0943f074dcaa73a52 |
|
MD5 | 37f50d30d3b23ed156bd043f21d6b63f |
|
BLAKE2b-256 | 6c3e939ea977ef0dd9e25801407ff82d1873b7a3753825c22df5f2727dfca94c |