方案一: tabulate + wcwidth
tabulate 用于制表
wcwidth 用于处理CJK字符宽度与ASCII不一致问题
pip install tabulate wcwidth
from tabulate import tabulate
import wcwidth
table_header = ['名字', '语文', '数学', '英语']
table_data = [
('Tom', '90', '80', '85'),
('Jim', '70', '90', '80'),
('Lucy', '90', '70', '90'),
]
print(tabulate(table_data, headers=table_header, tablefmt='grid'))
image.png
+--------+--------+--------+--------+
| 名字 | 语文 | 数学 | 英语 |
+========+========+========+========+
| Tom | 90 | 80 | 85 |
+--------+--------+--------+--------+
| Jim | 70 | 90 | 80 |
+--------+--------+--------+--------+
| Lucy | 90 | 70 | 90 |
+--------+--------+--------+--------+
注:
- tabulate 在 import 后,会判断当前python环境里是否存在 wcwidth, 如果存在,会默认设置宽字符模式. 如需关闭:
tabulate.WIDE_CHARS_MODE = False
- 在 import tabulate 之后, 再安装 wcwidth, 不会触发宽字符设置.
- 还支持各种制表格式 https://github.com/astanin/python-tabulate#table-format
方案二: prettytable
pip install prettytable
from prettytable import PrettyTable
table_header = ['名字', '语文', '数学', '英语']
table_data = [
('Tom', '90', '80', '85'),
('Jim', '70', '90', '80'),
('Lucy', '90', '70', '90'),
]
table = PrettyTable()
table.field_names=table_header
table.add_rows(table_data)
print(table)
image.png
+------+------+------+------+
| 名字 | 语文 | 数学 | 英语 |
+------+------+------+------+
| Tom | 90 | 80 | 85 |
| Jim | 70 | 90 | 80 |
| Lucy | 90 | 70 | 90 |
+------+------+------+------+
注:
- 字段支持不同设置,如对齐方式(左对齐,居中,右对齐),表格分界符等
- 还支持其他表格式: ascii color; html; markdown
- 可以从数据库中读取数据
- 文档: https://github.com/jazzband/prettytable
网友评论