杰瑞科技汇

python打印表格对齐 python2

  1. 使用字符串的 str.ljust(), str.rjust(), str.center() 方法:这是最基础、最灵活的方法,适用于简单的表格。
  2. 使用第三方库 prettytable:这是功能最强大、效果最专业的方法,可以轻松处理复杂的表格,包括标题、边框等。

下面我将详细介绍这两种方法,并提供完整的代码示例。

python打印表格对齐 python2-图1
(图片来源网络,侵删)

使用字符串的 ljust(), rjust(), center() 方法

这是 Python 2 和 Python 3 都内置的方法,无需安装任何库,其核心思想是:

  1. 确定每一列的最大宽度。
  2. 遍历每一行数据。
  3. 对该行的每个单元格,使用相应的 justify 方法(左对齐、右对齐、居中)填充到该列的最大宽度。
  4. 将处理后的单元格拼接起来,形成一行字符串并打印。

示例代码

假设我们有以下数据:

# --- 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    深圳  
---------------------

代码解析:

  1. 计算列宽 (col_widths): 我们先遍历所有数据,找出每一列中最长的字符串长度,这是实现完美对齐的关键。
  2. 格式化单元格: 在打印每一行时,我们再次遍历每个单元格,使用 str.ljust(width) 方法,它会返回一个左对齐的新字符串,并用空格填充到指定的 width 长度。
  3. 拼接并打印: 使用 " ".join(...) 将格式化后的单元格连接起来, (两个空格) 作为列之间的分隔符,使表格看起来更清晰。

对齐方式选择:

python打印表格对齐 python2-图2
(图片来源网络,侵删)
  • 左对齐: 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

python打印表格对齐 python2-图3
(图片来源网络,侵删)
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 |   深圳 |
+--------+------+--------+

代码解析:

  1. 创建表: pt = prettytable.PrettyTable(data[0]) 直接用表头创建了一个表格对象。
  2. 设置对齐: pt.align["列名"] = "对齐方式" 是核心功能。"l" 代表左对齐 (left), "r" 代表右对齐 (right), "c" 代表居中 (center)。
  3. 添加行: pt.add_row(row) 方法将一行数据添加到表格中。
  4. 打印: 直接 print 对象,prettytable 会自动生成格式优美的表格,包括边框和对齐。

prettytable 还有很多其他强大的功能,比如设置表格样式、输出为 HTML 或 Markdown 格式等,非常适合需要生成报表的场景。


总结与对比

特性 方法一 (字符串方法) 方法二 (prettytable 库)
依赖 无需安装,Python 内置 需要安装 pip install prettytable
易用性 较复杂,需要手动计算宽度和拼接 非常简单,几行代码即可生成专业表格
灵活性 高度可控,可自定义任何分隔符和对齐方式 功能强大,但受限于库提供的选项
功能 基础的对齐和格式化 自动计算宽度、边框、标题、HTML/Markdown 导出等
适用场景 简单脚本、快速打印、不希望引入外部依赖 需要生成清晰美观的报告、Web 应用、命令行工具

建议:

  • 如果只是偶尔在控制台打印一个简单的对齐列表,方法一完全够用且轻量。
  • 如果你的项目需要频繁地打印表格,或者希望表格看起来更专业、更美观,强烈推荐使用 prettytable,它能极大地提升效率和代码的可读性。
分享:
扫描分享到社交APP
上一篇
下一篇