- 使用字符串的
str.ljust(),str.rjust(),str.center()方法:这是最基础、最灵活的方法,适用于简单的表格。 - 使用第三方库
prettytable:这是功能最强大、效果最专业的方法,可以轻松处理复杂的表格,包括标题、边框等。
下面我将详细介绍这两种方法,并提供完整的代码示例。

使用字符串的 ljust(), rjust(), center() 方法
这是 Python 2 和 Python 3 都内置的方法,无需安装任何库,其核心思想是:
- 确定每一列的最大宽度。
- 遍历每一行数据。
- 对该行的每个单元格,使用相应的
justify方法(左对齐、右对齐、居中)填充到该列的最大宽度。 - 将处理后的单元格拼接起来,形成一行字符串并打印。
示例代码
假设我们有以下数据:
# --- Python 2 代码 ---
# 定义数据
data = [
['姓名', '年龄', '城市'],
['张三', 28, '北京'],
['李四', 34, '上海'],
['王五', 21, '广州'],
['赵六', 45, '深圳']
]
# 1. 计算每一列的最大宽度
# 首先初始化一个列表来存储每列的最大宽度
col_widths = [0] * len(data[0])
# 遍历每一行
for row in data:
# 遍历该行的每一个单元格
for i, cell in enumerate(row):
# 计算单元格内容的宽度(将数字转为字符串)
cell_width = len(str(cell))
# 如果当前单元格宽度大于该列已知的最大宽度,则更新最大宽度
if cell_width > col_widths[i]:
col_widths[i] = cell_width
# 2. 打印表格
print "---------------------"
for row in data:
# 创建一个空列表来存储格式化后的单元格
formatted_row = []
for i, cell in enumerate(row):
# 将所有单元格内容转为字符串
str_cell = str(cell)
# 根据列索引决定对齐方式(这里示例为左对齐)
# 你可以使用 rstr_cell.rjust(col_widths[i]) 右对齐
# 或 str_cell.center(col_widths[i]) 居中
formatted_cell = str_cell.ljust(col_widths[i])
formatted_row.append(formatted_cell)
# 用空格连接所有格式化后的单元格,并打印
print " ".join(formatted_row)
print "---------------------"
输出结果
---------------------
姓名 年龄 城市
张三 28 北京
李四 34 上海
王五 21 广州
赵六 45 深圳
---------------------
代码解析:
- 计算列宽 (
col_widths): 我们先遍历所有数据,找出每一列中最长的字符串长度,这是实现完美对齐的关键。 - 格式化单元格: 在打印每一行时,我们再次遍历每个单元格,使用
str.ljust(width)方法,它会返回一个左对齐的新字符串,并用空格填充到指定的width长度。 - 拼接并打印: 使用
" ".join(...)将格式化后的单元格连接起来, (两个空格) 作为列之间的分隔符,使表格看起来更清晰。
对齐方式选择:

- 左对齐:
str_cell.ljust(col_widths[i])(适合文本,如姓名、城市) - 右对齐:
str_cell.rjust(col_widths[i])(适合数字,如年龄、价格) - 居中:
str_cell.center(col_widths[i])(适合标题)
你可以根据需要为不同列选择不同的对齐方式。
使用 prettytable 库
对于更复杂、更美观的表格,强烈推荐使用 prettytable 库,它能自动处理对齐、边框、标题等,让你从繁琐的格式化工作中解放出来。
安装 prettytable
在 Python 2 的环境中,打开终端或命令行,运行:
pip install prettytable
或者如果 pip 不可用,可以尝试 easy_install:

easy_install prettytable
示例代码
使用 prettytable 来打印上面的数据表格非常简单。
# --- Python 2 代码 ---
import prettytable
# 定义数据
data = [
['姓名', '年龄', '城市'],
['张三', 28, '北京'],
['李四', 34, '上海'],
['王五', 21, '广州'],
['赵六', 45, '深圳']
]
# 1. 创建一个 PrettyTable 对象
# 可以将第一行作为标题传入
pt = prettytable.PrettyTable(data[0])
pt.align["姓名"] = "l" # 设置"姓名"列为左对齐
pt.align["年龄"] = "r" # 设置"年龄"列为右对齐
pt.align["城市"] = "c" # 设置"城市"列为居中对齐
# 2. 添加数据行 (从第二行开始)
for row in data[1:]:
pt.add_row(row)
# 3. 打印表格
print pt
输出结果
+--------+------+--------+
| 姓名 | 年龄 | 城市 |
+--------+------+--------+
| 张三 | 28 | 北京 |
| 李四 | 34 | 上海 |
| 王五 | 21 | 广州 |
| 赵六 | 45 | 深圳 |
+--------+------+--------+
代码解析:
- 创建表:
pt = prettytable.PrettyTable(data[0])直接用表头创建了一个表格对象。 - 设置对齐:
pt.align["列名"] = "对齐方式"是核心功能。"l"代表左对齐 (left),"r"代表右对齐 (right),"c"代表居中 (center)。 - 添加行:
pt.add_row(row)方法将一行数据添加到表格中。 - 打印: 直接
print对象,prettytable会自动生成格式优美的表格,包括边框和对齐。
prettytable 还有很多其他强大的功能,比如设置表格样式、输出为 HTML 或 Markdown 格式等,非常适合需要生成报表的场景。
总结与对比
| 特性 | 方法一 (字符串方法) | 方法二 (prettytable 库) |
|---|---|---|
| 依赖 | 无需安装,Python 内置 | 需要安装 pip install prettytable |
| 易用性 | 较复杂,需要手动计算宽度和拼接 | 非常简单,几行代码即可生成专业表格 |
| 灵活性 | 高度可控,可自定义任何分隔符和对齐方式 | 功能强大,但受限于库提供的选项 |
| 功能 | 基础的对齐和格式化 | 自动计算宽度、边框、标题、HTML/Markdown 导出等 |
| 适用场景 | 简单脚本、快速打印、不希望引入外部依赖 | 需要生成清晰美观的报告、Web 应用、命令行工具 |
建议:
- 如果只是偶尔在控制台打印一个简单的对齐列表,方法一完全够用且轻量。
- 如果你的项目需要频繁地打印表格,或者希望表格看起来更专业、更美观,强烈推荐使用
prettytable,它能极大地提升效率和代码的可读性。
