Skip to main content

philiprehberger-cli-table

Tests PyPI version Last updated

philiprehberger-cli-table

Format Python data as aligned terminal tables with no dependencies.

Installation

pip install philiprehberger-cli-table

Usage

Dict list mode

from philiprehberger_cli_table import table

data = [
    {"name": "Alice", "age": 30, "city": "Berlin"},
    {"name": "Bob", "age": 25, "city": "Vienna"},
    {"name": "Charlie", "age": 35, "city": "Zurich"},
]

table(data)
# name     age  city
# -------  ---  ------
# Alice    30   Berlin
# Bob      25   Vienna
# Charlie  35   Zurich

Headers + rows mode

from philiprehberger_cli_table import table

table(
    headers=["Product", "Price", "Stock"],
    rows=[
        ["Widget", "9.99", "142"],
        ["Gadget", "24.99", "38"],
    ],
)
# Product  Price  Stock
# -------  -----  -----
# Widget   9.99   142
# Gadget   24.99  38

Column alignment

Numeric columns auto-right-align — no align config needed. Pass align only when you want to override the inferred alignment.

from philiprehberger_cli_table import table

table(
    data=[
        {"item": "Coffee", "qty": 3, "price": "4.50"},
        {"item": "Tea", "qty": 12, "price": "2.00"},
    ],
)
# item    qty  price
# ------  ---  -----
# Coffee    3   4.50
# Tea      12   2.00

# Override inferred alignment when needed
table(
    data=[{"item": "Coffee", "qty": 3}],
    align={"qty": "center"},
)

Styles

from philiprehberger_cli_table import format_table

# Markdown style
print(format_table(
    headers=["Name", "Score"],
    rows=[["Alice", "95"], ["Bob", "87"]],
    style="markdown",
))
# | Name  | Score |
# | ----- | ----- |
# | Alice | 95    |
# | Bob   | 87    |

# No borders
print(format_table(
    headers=["Name", "Score"],
    rows=[["Alice", "95"], ["Bob", "87"]],
    style="none",
))
# Name   Score
# Alice  95
# Bob    87

# Grid style with Unicode box-drawing borders
print(format_table(
    headers=["Name", "Score"],
    rows=[["Alice", "95"], ["Bob", "87"]],
    style="grid",
))
# ┌───────┬───────┐
# │ Name  │ Score │
# ├───────┼───────┤
# │ Alice │ 95    │
# │ Bob   │ 87    │
# └───────┴───────┘

Cell truncation

from philiprehberger_cli_table import table

table(
    data=[{"description": "A very long description that goes on and on"}],
    max_width=20,
)

Wide character support

Supports CJK and other wide Unicode characters with correct column alignment.

from philiprehberger_cli_table import table

table(
    headers=["Item", "Qty", "Total"],
    rows=[
        ["Coffee", "3", "12.00"],
        ["Tea", "2", "4.00"],
    ],
    footer=["Total", "5", "16.00"],
)
# Item    Qty  Total
# ------  ---  -----
# Coffee  3    12.00
# Tea     2     4.00
# ------  ---  -----
# Total   5    16.00

A footer can also be passed as a dict keyed by header name:

table(
    data=[{"item": "Coffee", "n": 3}, {"item": "Tea", "n": 2}],
    footer={"item": "Total", "n": 5},
)

API

Function Description
format_table(headers, rows, *, data, align, max_width, style, footer) Returns a formatted table as a string
table(data, headers, rows, **kwargs) Prints a formatted table to stdout

Parameters

Parameter Type Default Description
headers list[str] | None None Column header names
rows list[list[Any]] | None None List of row value lists
data list[dict[str, Any]] | None None List of dicts (keys become headers)
align dict[str, Align] | None None Per-column alignment: "left", "right", "center"
max_width int | None None Truncate cell values to this width
style Style "simple" Border style: "simple", "markdown", "none", "grid"
footer list | dict | None None Footer row rendered below a divider (totals/summary)

Development

pip install -e .
python -m pytest tests/ -v

Support

If you find this project useful:

⭐ Star the repo

🐛 Report issues

💡 Suggest features

❤️ Sponsor development

🌐 All Open Source Projects

💻 GitHub Profile

🔗 LinkedIn Profile

License

MIT

Release files for philiprehberger-cli-table 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for philiprehberger-cli-table 0.4.0
File Size Uploaded
philiprehberger_cli_table-0.4.0.tar.gz 189.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for philiprehberger-cli-table 0.4.0
File Interpreter ABI Platform
philiprehberger_cli_table-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 195.7 kB

Release files / philiprehberger_cli_table-0.4.0.tar.gz

Download URL philiprehberger_cli_table-0.4.0.tar.gz
Size 189.0 kB
Tags Source
SHA-256 checksum
How to use checksums
ecba8aab1fc54c6455517dad662d67a0339e33ad1822271a33c38573cfbf297e
BLAKE2b-256 checksum
How to use checksums
80d864f9f2d0d884f3f7889ed3a09ac8d540e0374c24dda1b745ec5ecadc7ca8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / philiprehberger_cli_table-0.4.0-py3-none-any.whl

Download URL philiprehberger_cli_table-0.4.0-py3-none-any.whl
Size 6.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d82c0953eb7167688c5ff622fed17db9f3dc186fce8d123bbf6af8f164280bf3
BLAKE2b-256 checksum
How to use checksums
60745618717d914a6f62289006ecd078f11012c0bef51c9fb17374234b58ab6a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page