Python 表格打印进化史:从朴素到惊艳,让你的数据展示更专业!
在日常开发和数据分析中,我们经常需要在终端或文档中展示表格数据。直接使用 print() 拼接虽然简单,但往往排版混乱,显得不够专业。那么今天我将带你领略 Python 表格打印的进化历程,从基础方法到高级技巧,让你的数据展示焕然一新!
基础篇:原生 Python 实现
1. 原始 print 拼接
data = [
["姓名", "年龄", "城市"],
["小李", 25, "北京"],
["小王", 30, "上海"],
["小张", 28, "深圳"]
]
for row in data:
print(" ".join(str(x) for x in row))
输出结果:
姓名 年龄 城市
小李 25 北京
小王 30 上海
小张 28 深圳
缺点:需要手动调整空格,数据长度变化时容易错位。
2. format 格式化
for row in data:
print("{:<6}{:<4}{:<6}".format(*row))
输出结果:
姓名 年龄 城市
小李 25 北京
小王 30 上海
小张 28 深圳
优点:比直接拼接更整齐,但仍需手动设置列宽。
进阶篇:第三方库助力
3. tabulate:快速上手的神器
from tabulate import tabulate
print(tabulate(data[1:], headers=data[0], tablefmt="grid"))
输出结果:
+------+----+------+
| 姓名 | 年龄 | 城市 |
+------+----+------+
| 小李 | 25 | 北京 |
| 小王 | 30 | 上海 |
| 小张 | 28 | 深圳 |
+------+----+------+
特点:支持多种表格样式(plain, fancy_grid, github等),简单易用。
4. PrettyTable:灵活定制
from prettytable import PrettyTable
table = PrettyTable()
table.field_names = data[0]
for row in data[1:]:
table.add_row(row)
print(table)
输出结果:
+------+-----+------+
| 姓名 | 年龄 | 城市 |
+------+-----+------+
| 小李 | 25 | 北京 |
| 小王 | 30 | 上海 |
| 小张 | 28 | 深圳 |
+------+-----+------+
优势:支持对齐方式、边框样式定制,可导出 HTML。
5. pandas:数据分析首选
import pandas as pd
df = pd.DataFrame(data[1:], columns=data[0])
print(df.to_string(index=False))
输出结果:
姓名 年龄 城市
小李 25 北京
小王 30 上海
小张 28 深圳
优势:数据处理与展示一体化,适合数据分析场景。
高级篇:终端美化艺术
6. rich:终端里的艺术品
from rich.table import Table
from rich.console import Console
table = Table(title="人员信息")
table.add_column("姓名", justify="center", style="cyan")
table.add_column("年龄", justify="right", style="magenta")
table.add_column("城市", justify="center", style="green")
for row in data[1:]:
table.add_row(*map(str, row))
console = Console()
console.print(table)
输出效果:彩色表格,支持复杂样式和嵌套(实际效果需在终端查看)。
7. texttable:专业文本表格
from texttable import Texttable
table = Texttable()
table.set_cols_align(["l", "r", "c"])
table.add_rows(data)
print(table.draw())
输出结果:
┌──────┬────┬──────┐
│姓名 │年龄│ 城市 │
├──────┼────┼──────┤
│小李 │ 25│ 北京 │
├──────┼────┼──────┤
│小王 │ 30│ 上海 │
├──────┼────┼──────┤
│小张 │ 28│ 深圳 │
└──────┴────┴──────┘
特点:专业的文本表格库,支持中文对齐。
实战篇:自定义封装
8. 自动调整列宽封装
def print_table(rows):
col_widths = [max(len(str(x)) for x in col) for col in zip(*rows)]
for row in rows:
print(" | ".join(str(x).ljust(w) for x, w in zip(row, col_widths)))
print_table(data)
输出结果:
姓名 | 年龄 | 城市
小李 | 25 | 北京
小王 | 30 | 上海
小张 | 28 | 深圳
优势:自动适应内容宽度,适合快速部署。
总结与选择建议
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 临时脚本 | 自定义函数 | 轻量,无需依赖 |
| 文档生成 | tabulate | 样式丰富,简单易用 |
| 交互式工具 | PrettyTable | 灵活定制,功能全面 |
| 数据分析 | pandas | 数据处理展示一体化 |
| 终端美化 | rich | 视觉效果出众,功能强大 |
| 专业报表 | texttable | 专业表格格式,支持复杂需求 |
核心建议:根据实际需求选择合适的工具,避免过度设计。简单的场景用简单的方法,复杂的需求选择专业的库。
9748

被折叠的 条评论
为什么被折叠?



