news 2026/5/23 9:38:35

pprint,一个漂亮打印的 Python 库!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pprint,一个漂亮打印的 Python 库!

在日常编程中,我们经常需要打印复杂的数据结构——嵌套的字典、列表、JSON 响应、配置对象等。使用普通的print()会将整个结构挤在一行或简单换行,导致可读性极差,尤其是在调试多层嵌套的 API 返回数据时,简直是一场灾难。pprint模块(Pretty Printer)正是为了解决这一问题而诞生的。它能够将 Python 对象以一种美观、缩进对齐、可读性强的格式输出,并且自动处理递归结构、限制深层展示、支持宽度控制。在实际生活中,这就像把杂乱无章的衣柜整理得井井有条——当你需要理解复杂的配置文件、分析爬虫抓取的嵌套数据、向同事展示数据结构样例,甚至只是调试自己的代码时,pprint都能让你的控制台输出变得清晰如一封排版优美的信件。


一、安装库

pprint是 Python 标准库,无需额外安装。直接导入即可:

python

from pprint import pprint, pformat

通常使用pprint()直接打印,或pformat()返回格式化后的字符串以供日志记录。


二、基本用法

下面通过 4 个小步骤掌握pprint的核心使用。

1. 简单打印嵌套结构

对比普通printpprint的输出差异:

python

from pprint import pprint data = { "name": "Alice", "age": 30, "address": { "street": "123 Main St", "city": "Springfield", "coordinates": {"lat": 40.123, "lng": -74.456} }, "hobbies": ["reading", "coding", "hiking"], "metadata": {"created": "2024-01-01", "version": 1.2} } print("普通 print:") print(data) print("\npprint 输出:") pprint(data)

pprint会智能换行、缩进,使得结构一目了然。

2. 控制输出宽度

通过width参数调整每行最大字符数(默认 80):

python

pprint(data, width=40) # 更窄的宽度,强制更多换行

3. 设置缩进深度

indent参数控制每一层的缩进空格数(默认 1):

python

pprint(data, indent=4) # 每层缩进4个空格

4. 限制嵌套层级

depth参数可以截断过深的嵌套:

python

deep = [1, [2, [3, [4, [5]]]]] pprint(deep, depth=3) # 最深只显示三层,更深用 '...' 表示

三、高级用法

使用pformat()获取字符串

当需要将格式化后的内容写入日志文件或发送到网络时,使用pformat()

python

import logging from pprint import pformat logging.basicConfig(level=logging.INFO) data = {"key": [1, 2, 3], "nested": {"a": 10, "b": 20}} logging.info("Data structure:\n%s", pformat(data))

自定义PrettyPrinter对象

可以创建pprint.PrettyPrinter实例,并配置自己的输出流(例如写入文件):

python

from pprint import PrettyPrinter with open("output.txt", "w") as f: printer = PrettyPrinter(stream=f, indent=2, width=60) printer.pprint(data)

处理递归数据结构

pprint能检测并优雅处理递归引用,避免无限打印:

python

recursive_list = [] recursive_list.append(recursive_list) pprint(recursive_list) # 输出: [<Recursion on list with id=...>]

紧凑输出

compact参数(Python 3.4+)让序列在一行内尽可能紧凑:

python

long_list = [1, 2, 3, 4, 5, 6, 7, 8] pprint(long_list, compact=True) # 输出: [1, 2, 3, 4, 5, 6, 7, 8](不换行) # 如果超出宽度,则适当换行

四、实际应用场景

场景1:调试 API 响应(电商价格爬虫)

当你调用一个电商的开放 API 获取商品详情时,返回的 JSON 可能嵌套很深。用pprint快速查看结构,找出价格字段路径:

python

import requests from pprint import pprint response = requests.get("https://dummyjson.com/products/1") data = response.json() pprint(data, depth=2) # 只看前两层,避免刷屏 # 输出会清晰展示 product 的 id、title、price 等字段的位置

场景2:分析配置文件差异

运维人员常使用 YAML/JSON 配置文件。用pprint格式化后对比两个配置的差异(配合difflib):

python

from pprint import pformat import difflib config_old = {"db": {"host": "localhost", "port": 5432}, "cache": {"ttl": 60}} config_new = {"db": {"host": "192.168.1.1", "port": 5432}, "cache": {"ttl": 120}} old_str = pformat(config_old, width=50) new_str = pformat(config_new, width=50) diff = difflib.unified_diff(old_str.splitlines(), new_str.splitlines(), lineterm='') print("\n".join(diff))

场景3:教学演示或代码文档生成

在编写技术教程时,需要展示复杂数据结构的样例输出。pprint可以生成整洁的示例:

python

from pprint import pprint example = { "name": "Person", "fields": [ {"name": "id", "type": "int"}, {"name": "name", "type": "str"}, ], "meta": {"created": "2025-01-01"} } print("预期的数据结构:") pprint(example, indent=2)

场景4:日志记录中的结构化数据(深度案例)

在分布式系统中,经常需要记录每个请求的上下文。利用pformat将其写入日志,方便后续排查:

python

import logging from pprint import pformat from datetime import datetime import random logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(message)s") def process_request(user_id, payload): context = { "user_id": user_id, "timestamp": datetime.now().isoformat(), "payload": payload, "internal_state": { "cache_hit": random.choice([True, False]), "retry_count": random.randint(0, 3), "errors": [] } } # 使用 pformat 将复杂对象转为可读字符串 logging.info("Request context:\n%s", pformat(context, indent=2, width=100)) # 实际业务逻辑... return context process_request(12345, {"action": "buy", "item": "laptop", "quantity": 1})

此案例中,pformat保证了即使payloadinternal_state嵌套较深,日志依然整洁易读,便于事后分析。


五、结尾互动

总而言之,pprint是一个小巧但极其实用的标准库。它用优雅的排版拯救了开发者面对杂乱数据时的双眼——无论是调试、教学、日志记录还是数据探索,pprint都能瞬间提升你的信息获取效率。记住:当你下一次为print(data)输出的混乱而头痛时,只需将print改成pprint,世界立刻变得清晰。如果你有自己独特的使用技巧(比如结合json.dumpspprint,或自定义PrettyPrinter子类过滤敏感信息),欢迎在评论区分享。你曾因为数据输出不直观而浪费了多少调试时间?试试pprint,也许会有意想不到的收获。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 9:35:47

3步掌握WeChatExporter:永久备份微信聊天记录的终极方案

3步掌握WeChatExporter&#xff1a;永久备份微信聊天记录的终极方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因手机丢失或更换设备而痛失珍贵的微信聊天记…

作者头像 李华
网站建设 2026/5/23 9:34:44

抖音下载神器:如何免费批量下载无水印视频、音乐和图片

抖音下载神器&#xff1a;如何免费批量下载无水印视频、音乐和图片 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…

作者头像 李华
网站建设 2026/5/23 9:31:29

3步构建专业中文排版系统:Source Han Serif CN实战指南

3步构建专业中文排版系统&#xff1a;Source Han Serif CN实战指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是否曾为中文排版的美观性和专业性而烦恼&#xff1f;面对复杂的商…

作者头像 李华
网站建设 2026/5/23 9:31:20

Steam创意工坊模组下载神器:WorkshopDL终极免费指南

Steam创意工坊模组下载神器&#xff1a;WorkshopDL终极免费指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为跨平台游戏无法使用Steam创意工坊模组而烦恼吗&#xff1…

作者头像 李华
网站建设 2026/5/23 9:30:56

3大核心功能重塑:茉莉花插件如何让中文文献管理效率提升300%

3大核心功能重塑&#xff1a;茉莉花插件如何让中文文献管理效率提升300% 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件&#xff0c;用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为繁…

作者头像 李华