原文链接:http://www.juzicode.com/python-module-pprint
pprint(Pretty Printer)是Python标准库中的结构化数据打印模块,通过智能格式化使复杂数据结构如字典、列表等具有可读性输出,适用于调试、日志记录和数据展示等场景。
应用场景
- 调试嵌套数据结构
- JSON数据可视化
- API响应解析
- 配置文件格式化
- 数据库查询结果展示
- 机器学习数据集预览
安装与导入
# 标准库无需安装
from pprint import pprint, pformat, PrettyPrinter
使用方法
1)基础美化打印
使用pprint()替代print(),自动格式化嵌套结构并添加缩进,下面的例子对比了print和pprint打印的区别。
# juzicode.com/VX公众号:juzicode
from pprint import pprint, pformat, PrettyPrinter
data = {
"name": "桔子代码",
"projects": ["Python教程", "算法专栏", "工具开发"],
"stats": {"订阅数": 9500, "更新频率": "每周三次"},
"contact": {"微信": "juzicode", "网站": "juzicode.com"}
}
print(data)
pprint(data)
运行结果:
{'name': '桔子代码', 'projects': ['Python教程', '算法专栏', '工具开发'], 'stats': {'订阅数': 9500, '更新频率': '每周三次'}, 'contact': {'微信': 'juzicode', '网站': 'juzicode.com'}}
{'contact': {'微信': 'juzicode', '网站': 'juzicode.com'},
'name': '桔子代码',
'projects': ['Python教程', '算法专栏', '工具开发'],
'stats': {'更新频率': '每周三次', '订阅数': 9500}}
2)控制缩进层级
通过indent参数调整嵌套结构的缩进空格数,下面的例子中每个item按照缩进2个字符对齐。
# juzicode.com/VX公众号:juzicode
from pprint import pprint, pformat, PrettyPrinter
data = {
"name": "桔子代码",
"projects": ["Python教程", "算法专栏", "工具开发"],
"stats": {"订阅数": 9500, "更新频率": "每周三次"},
"contact": {"微信": "juzicode", "网站": "juzicode.com"}
}
pprint(data, indent=2)
运行结果:

3)限制输出宽度
使用width参数控制每行最大字符数,避免终端折行。需要注意的是width指定的是最优宽度,如果同一个元素超过了最大限制长度需要分行,并不一定按照width指定的宽度打印。比如下面的例子输出时 tags 的最大宽度大于 20时,如果是同一个元素仍然在一行内打印。
# juzicode.com/VX公众号:juzicode
from pprint import pprint
data = {
"user": {
"name": "Alice",
"age": 30,
"tags": ["admin", "developer", "python"]
}
}
pprint(data) # 默认宽度(80)
pprint(data, width=20)
pprint(data, width=70)
运行结果:

4)控制嵌套深度
通过depth参数限制打印的嵌套层级,简化复杂对象。下面的例子是一个4层嵌套的字典,指定depth=2只打印2层数据。
# juzicode.com/VX公众号:juzicode
from pprint import pprint
nested_data = {'a': {'b': {'c': {'d': 1}}}
pprint(nested_data, depth=2)
运行结果:
{'a': {'b': {...}}}
5)获取格式化字符串
使用pformat()返回格式化字符串而非直接打印,便于日志记录。
# juzicode.com/VX公众号:juzicode
from pprint import pprint, pformat
data = {
"name": "桔子代码",
"projects": ["Python教程", "算法专栏", "工具开发"],
"stats": {"订阅数": 9500, "更新频率": "每周三次"},
"contact": {"微信": "juzicode", "网站": "juzicode.com"}
}
formatted = pformat(data, indent=4)
print(type(formatted)) # 查看类型
print(f"格式化结果:\n{formatted}")
运行结果:
<class 'str'>
格式化结果:
{ 'contact': {'微信': 'juzicode', '网站': 'juzicode.com'},
'name': '桔子代码',
'projects': ['Python教程', '算法专栏', '工具开发'],
'stats': {'更新频率': '每周三次', '订阅数': 9500}}
6)自定义打印机
创建PrettyPrinter实例实现全局配置,统一项目输出风格。
# juzicode.com/VX公众号:juzicode
from pprint import pprint, pformat, PrettyPrinter
data = {
"name": "桔子代码",
"projects": ["Python教程", "算法专栏", "工具开发"],
"stats": {"订阅数": 9500, "更新频率": "每周三次"},
"contact": {"微信": "juzicode", "网站": "juzicode.com"}
}
custom_printer = PrettyPrinter(
indent=3,
width=100,
depth=2,
compact=False
)
custom_printer.pprint(data)
运行结果:
{ 'contact': {'微信': 'juzicode', '网站': 'juzicode.com'},
'name': '桔子代码',
'projects': ['Python教程', '算法专栏', '工具开发'],
'stats': {'更新频率': '每周三次', '订阅数': 9500}}
7)压缩长序列输出
设置compact=True优化长列表显示,减少换行。
# juzicode.com/VX公众号:juzicode
from pprint import pprint
matrix = [[i*j for j in range(1,7)] for i in range(1,9)]
pprint(matrix, compact=False)
pprint(matrix, compact=True)
运行结果:
[[1, 2, 3, 4, 5, 6],
[2, 4, 6, 8, 10, 12],
[3, 6, 9, 12, 15, 18],
[4, 8, 12, 16, 20, 24],
[5, 10, 15, 20, 25, 30],
[6, 12, 18, 24, 30, 36],
[7, 14, 21, 28, 35, 42],
[8, 16, 24, 32, 40, 48]]
[[1, 2, 3, 4, 5, 6], [2, 4, 6, 8, 10, 12], [3, 6, 9, 12, 15, 18],
[4, 8, 12, 16, 20, 24], [5, 10, 15, 20, 25, 30], [6, 12, 18, 24, 30, 36],
[7, 14, 21, 28, 35, 42], [8, 16, 24, 32, 40, 48]]
8)排序字典键输出
使用sort_dicts参数控制字典键的排序方式。
# juzicode.com/VX公众号:juzicode
from pprint import pprint
unsorted_dict = {'z': 1, 'a': 2, 'c': 3}
pprint(unsorted_dict, sort_dicts=False)
pprint(unsorted_dict, sort_dicts=True)
运行结果:
{'z': 1, 'a': 2, 'c': 3}
{'a': 2, 'c': 3, 'z': 1}
总结
pprint为数据结构可视化提供专业解决方案:
- 自动识别嵌套结构并缩进
- 支持深度/宽度/缩进等精细控制
- 提供字符串格式化输出
- 兼容所有Python原生数据结构
注意事项:
- 默认缩进为1空格(可通过indent调整)
- 超大结构建议限制depth防止内存溢出