pprint
是 Python 标准库中的一个模块,全称为 "Pretty Printer",用于生成数据结构的美观、可读性强的输出。特别适用于复杂嵌套的数据结构。
1. 基本用法
导入模块
import pprint
基本示例
import pprint
data = {
'name': 'John',
'age': 30,
'pets': ['dog', 'cat'],
'address': {
'street': '123 Main St',
'city': 'New York',
'coordinates': {'lat': 40.7128, 'lng': -74.0060}
}
}
# 使用 pprint 打印
pprint.pprint(data)
输出:
{'address': {'city': 'New York',
'coordinates': {'lat': 40.7128, 'lng': -74.0060},
'street': '123 Main St'},
'age': 30,
'name': 'John',
'pets': ['dog', 'cat']}
2. 主要函数
pprint.pprint(object, stream=None, indent=1, width=80, depth=None, *, compact=False, sort_dicts=True)
- stream: 输出流,默认为 sys.stdout
- indent: 缩进空格数
- width: 每行最大宽度
- depth: 最大嵌套深度
- compact: 是否紧凑显示
- sort_dicts: 是否对字典键排序
pprint.pformat(object, indent=1, width=80, depth=None, *, compact=False, sort_dicts=True)
返回格式化后的字符串,而不是直接打印。
import pprint
data = [{'name': 'Alice', 'scores': [90, 85, 92]},
{'name': 'Bob', 'scores': [78, 88, 91]}]
formatted = pprint.pformat(data, indent=2)
print(formatted)
3. 常用参数详解
width - 控制行宽
import pprint
data = {'a' * 20: 'value1', 'b' * 20: 'value2', 'c' * 20: 'value3'}
print("width=30:")
pprint.pprint(data, width=30)
print("\nwidth=60:")
pprint.pprint(data, width=60)
depth - 控制嵌套深度
import pprint
deep_data = {'level1': {'level2': {'level3': {'level4': 'secret'}}}}
print("depth=2:")
pprint.pprint(deep_data, depth=2)
print("\n默认深度:")
pprint.pprint(deep_data)
compact - 紧凑模式
import pprint
long_list = list(range(20))
print("compact=False:")
pprint.pprint(long_list, width=40, compact=False)
print("\ncompact=True:")
pprint.pprint(long_list, width=40, compact=True)
sort_dicts - 字典排序
import pprint
unsorted_dict = {'zebra': 1, 'apple': 2, 'banana': 3}
print("sort_dicts=True:")
pprint.pprint(unsorted_dict, sort_dicts=True)
print("\nsort_dicts=False:")
pprint.pprint(unsorted_dict, sort_dicts=False)
4. PrettyPrinter 类
可以创建实例来自定义输出格式:
import pprint
# 创建自定义 printer
custom_printer = pprint.PrettyPrinter(
indent=4,
width=100,
depth=3,
compact=True,
sort_dicts=False
)
data = {
'users': [
{'name': 'Alice', 'preferences': {'theme': 'dark', 'notifications': True}},
{'name': 'Bob', 'preferences': {'theme': 'light', 'notifications': False}}
],
'settings': {'version': '1.0', 'debug': False}
}
custom_printer.pprint(data)
5. 实际应用场景
调试复杂数据结构
import pprint
import json
# 解析 JSON 数据
json_data = '''
{
"users": [
{
"id": 1,
"profile": {
"personal": {"name": "John", "age": 30},
"professional": {"title": "Engineer", "skills": ["Python", "JavaScript"]}
}
}
]
}
'''
data = json.loads(json_data)
pprint.pprint(data, depth=3)
API 响应数据查看
import pprint
import requests
# 获取 API 数据并美观打印
response = requests.get('https://api.github.com/users/octocat')
data = response.json()
pprint.pprint(data, depth=2, width=80)
配置文件查看
import pprint
import yaml
config = """
database:
host: localhost
port: 5432
credentials:
username: admin
password: secret
options:
pool_size: 10
timeout: 30
"""
data = yaml.safe_load(config)
pprint.pprint(data)
6. 与普通 print 对比
import pprint
complex_data = {
'list_of_dicts': [{'key'+str(i): 'value'+str(i) for i in range(5)} for _ in range(3)],
'nested': {'a': {'b': {'c': {'d': 'deep_value'}}}}
}
print("普通 print:")
print(complex_data)
print("\n" + "="*50 + "\n")
print("pprint:")
pprint.pprint(complex_data, depth=3)
7. 实用技巧
临时禁用排序
import pprint
# 保持插入顺序的字典
from collections import OrderedDict
ordered_data = OrderedDict([('z', 1), ('a', 2), ('m', 3)])
pprint.pprint(ordered_data, sort_dicts=False)
自定义对象的美观打印
import pprint
class Person:
def __init__(self, name, age, hobbies):
self.name = name
self.age = age
self.hobbies = hobbies
def __repr__(self):
return f"Person(name='{self.name}', age={self.age}, hobbies={self.hobbies})"
people = [
Person("Alice", 25, ["reading", "hiking"]),
Person("Bob", 30, ["gaming", "cooking", "traveling"])
]
pprint.pprint(people)
总结
pprint
模块是 Python 开发中非常有用的工具,特别适用于:
- 调试复杂数据结构
- 查看 API 响应
- 分析配置文件
- 生成可读性强的日志输出
通过合理使用其参数,可以灵活控制输出格式,使数据更易于理解和分析。