Python打印日志不能只会print,快来熟悉pprint
动动小手,点击关注 ,感谢您的阅读,您的关注是我最大的动力!!!!
在 Python 开发中,打印复杂数据结构(如嵌套字典、多层列表)时,默认的print()函数往往输出为一行,难以快速读取。而pprint模块(Pretty Printer)能让数据以美观、易读的格式呈现,是调试和展示数据的必备工具。本文将通过核心函数、实用案例和避坑指南,带你掌握这个高效输出神器!
一、pprint 核心函数介绍
pprint模块提供了多个函数和类,支持所有可序列化的 Python 数据类型(列表、字典、元组、集合等),但不支持自定义类实例(需手动实现__repr__方法)。
1. pprint.pprint(object, indent=1, width=80, depth=None)
- 功能:直接打印美化后的数据,支持嵌套结构自动换行和缩进。
- 主要参数:
- indent:缩进空格数(默认 1)
- width:每行最大宽度(默认 80,超出则换行)
- depth:限制递归深度(避免无限嵌套)
2. pprint.pformat(object, indent=1, width=80, depth=None)
- 功能:返回美化后的字符串,而非直接打印,便于进一步处理(如日志记录)。
3. pprint.PrettyPrinter类
- 功能:自定义打印机,支持设置全局参数,适合需要重复使用相同格式的场景。
二、常用功能与案例
案例 1:基础美化输出(对比普通 print)
import pprint
# 杂乱的默认输出
data = {
"name": "Alice",
"age": 30,
"hobbies": ["reading", "swimming", "coding", "traveling"],
"contact": {
"email": "alice@example.com",
"phone": {
"home": "123-456-7890",
"mobile": "987-654-3210"
}
}
}
print(f"普通print输出:{data}")
print("pprint输出:")
pprint.pprint(data,indent=4,width=30)
输出对比:普通 print 输出会将嵌套结构挤在一行,而pprint自动换行并添加缩进,层次结构一目了然。
案例 2:处理超大嵌套结构(限制深度)
import pprint
# 深度为2时,只展开两层结构
deep_data = {"a": {"b": {"c": {"d": {"e": "五层嵌套"}}}}}
pprint.pprint(deep_data, depth=2)
# 输出:
# {'a': {'b': <...>}} # 深层结构用<...>表示
案例 3:自定义打印机(PrettyPrinter 类)
import pprint
# 创建自定义打印机:缩进4空格,宽度60
printer = pprint.PrettyPrinter(indent=4, width=60)
printer.pprint(data)
案例4:在logging模块中美化日志打印
import pprint
import logging
# 将pprint格式的字符串写入日志
formatted_data = pprint.pformat(data, indent=2)
logging.error("错误:\n%s", formatted_data)
总结
pprint是Python 开发者的 “数据美颜相机”,可以清晰呈现复杂结构,灵活的参数控制。主要适用场景: 调试时打印字典、列表等复杂数据 生成易读的文档或报告 日志中记录结构化信息
当然我们之前也分享过,对于list/dict等结构化数据,也可以使用json模块的json.dumps输出格式化数据,主要区别如下,大家根据需要自行选择。
功能 | pprint | json.dumps |
输出格式 | Python 原生格式(保留类型) | JSON字符串(跨语言) |
可读性 | 优化缩进和换行 | 需指定 indent 参数 |
嵌套处理 | 智能识别深层结构 | 仅支持有限层级 |