Python prettytable模块应用详解

沈知远
沈知远
发布时间:2026-10-16| 3人浏览过
原创

本文详细介绍Python中prettytable库的安装方法及核心用法。涵盖直接添加数据、从文件及数据库读取数据、多种输出方式(HTML/CSV等)以及内置和自定义样式设置,帮助开发者在命令行中生成美观易读的表格。

一、简介

1、概述

在命令行环境中展示复杂文本往往令人疲惫,因此将数据以表格形式呈现能显著提升阅读体验。

prettytable正是为此设计的工具,它能够生成美观的表格,并对中文支持良好。若尝试自行实现表格打印,便会发现处理中文对齐等细节相当繁琐。

2、安装

prettytable不属于Python标准库,需通过pip install prettytable命令进行安装。

3、实例

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
table = PrettyTable(["index", "name", 'age'])  # 实例化对象
"""
# 效果一样
table = PrettyTable()
table.field_names = ["index", "name", 'age']
"""
table.add_rows([  # 添加行
    [1, "Milk", "12"],
    [2, "Lili", "34"]
])
print(table)  # 把表格输出

二、添加数据

1、直接添加

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
# 方式一
table = PrettyTable(["index", "name", 'age'])  # 实例化对象
table.add_rows([  # 添加行
    [1, "Milk", "12"],
    [2, "Lili", "34"]
])
print(table)
# 方式二
table_ = PrettyTable()
table_.add_column('index', ['1', '2'])  # 直接添加每一列的数据
table_.add_column('name', ['Milk', 'Lili'])
table_.add_column('age', ['12', '34'])
print(table_)
  • 调用del_row方法,需传入要删除行的整数索引。
  • 调用del_column方法,需传入要删除列的字段名称。
  • 调用clear_rows方法时不接受任何参数,将删除表中所有行数据,但保留字段名称,便于后续用相同结构的数据重新填充表格。
  • 调用clear方法时不接受任何参数,将删除所有行及字段名称。需注意,这与创建新表实例略有不同,表格相关的样式设置会被保留。

2、文件读取

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
import json
from prettytable import from_csv, from_json, from_html
# 从CSV文件中读取
table = from_csv(open("test.csv", "r", encoding="utf-8"))  # 注意,要打开文件
print(table)
# 从JSON字符串中读取
data = [["name", "age"], {"name": "r", "age": 23}, {"name": "d", "age": 25}, {"name": "a", "age": 24}]  # 注意,要将第一个数据作为字段
table = from_json(json.dumps(data))  
print(table)
# 从html代码中读取
html = """
<table>
<tr>
<th>序号</th><th>姓名</th><th>年龄</th>
</tr>
<tr>
<td>1</td><td>a</td><td>23</td>
</tr>
<tr>
<td>2</td><td>b</td><td>24</td>
</tr>
</table>
"""
table = from_html(html)
print(table)

3、数据库

此外,还可以利用数据库游标来读取数据。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
import sqlite3
from prettytable import from_db_cursor
# 从数据库游标中读取
conn = sqlite3.connect("USERINFO.db")
cur = conn.cursor()
cur.execute("SELECT * FROM res") 
table = from_db_cursor(cur)
print(table)

三、输出方式

1、全部输出

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
table = PrettyTable(["index", "name", 'age'])
table.add_rows([
    [1, "Milk", "12"],
    [2, "Lili", "34"]
])
print(table)  # 把表格输出
print(table.get_html_string())  # 输出表格的html样式,还可以输出csv, json, latex

2、选择性输出

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
table = PrettyTable(["index", "name", 'age'])
table.add_rows([
    [1, "Milk", "12"],
    [2, "Lili", "34"],
    [3, "Lili1", "35"]
])
print(table[0: 2])  # 切片输出,输出前2行  print(table.get_string(start=0, end=2))
print(table.get_string(fields=["name", "age"]))  # 只输出姓名和年龄对应的列
print(table.get_string(sortby="age", reversesort=True))  # 根据年龄进行降序排序,默认为True,升序排序

四、输出样式

1、内置样式

使用set_style()函数可设置表格样式。prettytable内置了多种样式,个人推荐MSWORD_FRIENDLY、PLAIN_COLUMNS和DEFAULT这三种,它们在终端中显示较为清爽。考虑到终端显示表格本身已略显拥挤,若再添加过于花哨的装饰,反而会增加视觉负担。

除上述推荐的三种样式外,还有一种名为RANDOM的样式值得注意。该样式每次打印时会在内置样式中随机选取一种,颇具趣味性。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
from prettytable import MSWORD_FRIENDLY  # 电子文档模式
from prettytable import PLAIN_COLUMNS  # 普通文本模式
from prettytable import RANDOM  # 随机样式
from prettytable import DEFAULT  # 默认样式
table = PrettyTable(["index", "name", 'age'])
table.add_rows([
    [1, "Milk", "12"],
    [2, "Lili", "34"],
    [3, "Lili1", "35"]
])
# table.set_style(MSWORD_FRIENDLY)
# table.set_style(PLAIN_COLUMNS)
table.set_style(RANDOM)
print(table)
  • DEFAULT:默认外观,可用于撤销之前所做的任何样式更改。
  • PLAIN_COLUMNS:无边框样式,适用于柱状数据的命令行程序。
  • MARKDOWN:遵循Markdown语法的样式。
  • ORGMODE:适合Org模式语法的表格样式。
  • SINGLE_BORDER和DOUBLE_BORDER:使用带有方框图字符的连续单/双边框线样式,旨在终端中提供更精美的显示效果。

2、自定义样式

关于具体配置样式的详细信息,请访问官网查看:传送门

对齐方式:align参数允许用户设置对齐方式,可选值包括l(左对齐)、r(右对齐)和c(居中对齐)。若未设置,默认采用居中对齐。

边框样式:在PrettyTable中,边框由三个部分组成:横边框、竖边框以及边框连接符(即横竖交叉的连接符号)。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
table = PrettyTable(["index", "name", 'age'])
table.add_rows([
    [1, "Milk", "12"],
    [2, "Lili", "34"],
    [3, "Lili1", "35"]
])
table.border = True  # 是否显示边框
table.junction_char = '+'  # 绘制线连接的单个字符
table.horizontal_char = '~'  # 水平连接线的字符
table.vertical_char = '*'  # 垂直线连接的字符
print(table)

以上为库的大概使用方法,具体请参考官方网站的内容。

到此这篇关于Python prettytable模块应用详解的文章就介绍到这了,更多相关Python prettytable内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。