0
点赞
收藏
分享

微信扫一扫

PYTHON pprint模块

北溟有渔夫 9小时前 阅读 1

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 响应
  • 分析配置文件
  • 生成可读性强的日志输出

通过合理使用其参数,可以灵活控制输出格式,使数据更易于理解和分析。

举报

相关推荐

0 条评论