Python中的pprint模块


Posted in Python onNovember 27, 2021

一. pprint美观打印数据结构

pprint模块包含一个“美观打印机”,用于生成数据结构的一个美观的视图。格式化工具会生成数据结构的一些表示,不仅能够由解释器正确地解析,还便于人阅读。输出会尽可能放在一行上,分解为多行时会缩进。

1.打印

 

from pprint import pprint

data = [

    (1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),

    (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H',

         'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),

    (3, ['m', 'n']),

    (4, ['o', 'p', 'q']),

    (5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),

]

print('PRINT:')

print(data)

print()

print('PPRINT:')

pprint(data)

pprint()格式化一个对象,并把它作为参数传入一个数据流(或者是默认的sys.stdout)。

 

PRINT:
[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}), (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H', 'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}), (3, ['m', 'n']), (4, ['o', 'p', 'q']), (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]



PPRINT:

[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),

 (2,

  {'e': 'E',

   'f': 'F',

   'g': 'G',

   'h': 'H',

   'i': 'I',

   'j': 'J',

   'k': 'K',

   'l': 'L'}),

 (3, ['m', 'n']),

 (4, ['o', 'p', 'q']),

 (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]

2 .格式化

要格式化一个数据结构而不是把它直接写入一个流(即用于日志),可以使用pformat()来构建一个字符串表示。

 

import logging

from pprint import pformat



data = [

    (1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),

    (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H',

         'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),

    (3, ['m', 'n']),

    (4, ['o', 'p', 'q']),

    (5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),

]

logging.basicConfig(

    level=logging.DEBUG,

    format='%(levelname)-8s %(message)s',

)

logging.debug('Logging pformatted data')

formatted = pformat(data)

for line in formatted.splitlines():

    logging.debug(line.rstrip())

然后可以单独打印这个格式化的字符串或者记入日志。

 

DEBUG    Logging pformatted data

DEBUG    [(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),

DEBUG     (2,

DEBUG      {'e': 'E',

DEBUG       'f': 'F',

DEBUG       'g': 'G',

DEBUG       'h': 'H',

DEBUG       'i': 'I',

DEBUG       'j': 'J',

DEBUG       'k': 'K',

DEBUG       'l': 'L'}),

DEBUG     (3, ['m', 'n']),

DEBUG     (4, ['o', 'p', 'q']),

DEBUG     (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]

3. 任意类

如果一个定制类定义了一个__repr__()方法,那么pprint()使用的PrettyPrinter类还可以处理这样的定制类。

 

from pprint import pprint

class node:

    def __init__(self, name, contents=[]):

        self.name = name

        self.contents = contents[:]



    def __repr__(self):

        return (

                'node(' + repr(self.name) + ', ' +

                repr(self.contents) + ')'

        )

trees = [

    node('node-1'),

    node('node-2', [node('node-2-1')]),

    node('node-3', [node('node-3-1')]),

]

pprint(trees)

利用由PrettyPrinter组合的嵌套对象的表示来返回完整的字符串表示。

[node('node-1', []),

 node('node-2', [node('node-2-1', [])]),

 node('node-3', [node('node-3-1', [])])]

4. 递归

递归数据结构由指向原数据源的引用表示,形式为<Recursion on typename with id=number>

from pprint import pprint

local_data = ['a', 'b', 1, 2]

local_data.append(local_data)

print('id(local_data) =>', id(local_data))

pprint(local_data)

在这个例子中,列表local_data增加到其自身,这会创建一个递归引用。

id(local_data) => 2763816527488

['a', 'b', 1, 2, <Recursion on list with id=2763816527488>]

5. 限制嵌套输出

对于非常深的数据结构,可能不要求输出中包含所有细节。数据有可能没有适当地格式化,也可能格式化文本过大而无法管理,或者有些数据可能是多余的。

from pprint import pprint

data = [

    (1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),

    (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H',

         'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),

    (3, ['m', 'n']),

    (4, ['o', 'p', 'q']),

    (5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),

]

pprint(data, depth=1)

pprint(data, depth=2)

使用depth参数可以控制美观打印机递归处理嵌套数据结构的深度。输出中未包含的层次用省略号表示。

[(...), (...), (...), (...), (...)]

[(1, {...}), (2, {...}), (3, [...]), (4, [...]), (5, [...])]

6.控制输出宽度

格式化文本的默认输出宽度为80列。要调整这个宽度,可以在pprint()中使用参数width

 

from pprint import pprint

data = [

    (1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),

    (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H',

         'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),

    (3, ['m', 'n']),

    (4, ['o', 'p', 'q']),

    (5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),

]

for width in [80, 5]:

    print('WIDTH =', width)

    pprint(data, width=width)

    print()

当宽度太小而不能满足格式化数据结构时,倘若截断或转行会导致非法语法,那么便不会截断或转行。

WIDTH = 80

[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),

 (2,

  {'e': 'E',

   'f': 'F',

   'g': 'G',

   'h': 'H',

   'i': 'I',

   'j': 'J',

   'k': 'K',

   'l': 'L'}),

 (3, ['m', 'n']),

 (4, ['o', 'p', 'q']),

 (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]

WIDTH = 5

[(1,

  {'a': 'A',

   'b': 'B',

   'c': 'C',

   'd': 'D'}),

 (2,

  {'e': 'E',

   'f': 'F',

   'g': 'G',

   'h': 'H',

   'i': 'I',

   'j': 'J',

   'k': 'K',

   'l': 'L'}),

 (3,

  ['m',

   'n']),

 (4,

  ['o',

   'p',

   'q']),

 (5,

  ['r',

   's',

   'tu',

   'v',

   'x',

   'y',

   'z'])]

compact标志告诉pprint()尝试在每一行上放置更多数据,而不是把复杂数据结构分解为多行。

from pprint import pprint

data = [

    (1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),

    (2, {'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H',

         'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L'}),

    (3, ['m', 'n']),

    (4, ['o', 'p', 'q']),

    (5, ['r', 's', 't''u', 'v', 'x', 'y', 'z']),

]

for width in [80, 5]:

    print('WIDTH =', width)

    pprint(data, width=width)

    print()

这个例子展示了一个数据结构再一行上放不下时,它会分解(数据列表中的第二项也是如此)。如果多个元素可以放置在一行上(如第三个和第四个成员),那么便会把它们放在同一行上。

WIDTH = 80

[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}),

 (2,

  {'e': 'E',

   'f': 'F',

   'g': 'G',

   'h': 'H',

   'i': 'I',

   'j': 'J',

   'k': 'K',

   'l': 'L'}),

 (3, ['m', 'n']),

 (4, ['o', 'p', 'q']),

 (5, ['r', 's', 'tu', 'v', 'x', 'y', 'z'])]



WIDTH = 5

[(1,

  {'a': 'A',

   'b': 'B',

   'c': 'C',

   'd': 'D'}),

 (2,

  {'e': 'E',

   'f': 'F',

   'g': 'G',

   'h': 'H',

   'i': 'I',

   'j': 'J',

   'k': 'K',

   'l': 'L'}),

 (3,

  ['m',

   'n']),

 (4,

  ['o',

   'p',

   'q']),

 (5,

  ['r',

   's',

   'tu',

   'v',

   'x',

   'y',

   'z'])]

到此这篇关于 Python中的pprint模块的文章就介绍到这了,更多相关 Python pprint模块内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python写的一个简单DNS服务器实例
Jun 04 Python
零基础写python爬虫之神器正则表达式
Nov 06 Python
Python中关于字符串对象的一些基础知识
Apr 08 Python
Django中几种重定向方法
Apr 28 Python
Python实现控制台输入密码的方法
May 29 Python
python实现FTP服务器服务的方法
Apr 11 Python
python3之模块psutil系统性能信息使用
May 30 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 Python
浅谈Python程序的错误:变量未定义
Jun 02 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
python 多态 协议 鸭子类型详解
Nov 27 #Python
Python机器学习实战之k-近邻算法的实现
Python Django项目和应用的创建详解
python playwright 自动等待和断言详解
Nov 27 #Python
Python实现制作销售数据可视化看板详解
Python 如何利用ffmpeg 处理视频素材
实操Python爬取觅知网素材图片示例
You might like
php下使用以下代码连接并测试
2008/04/09 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
自动完成的搜索框javascript实现
2016/02/26 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
python实现的登录和操作开心网脚本分享
2014/07/09 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
关于python中的xpath解析定位
2020/03/06 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
《逃家小兔》教学反思
2014/02/23 职场文书
黄金搭档广告词
2014/03/21 职场文书
满月酒主持词
2014/03/27 职场文书
普通党员整改措施
2014/10/24 职场文书
幼师中班个人总结
2015/02/12 职场文书
公司更名通知函
2015/04/24 职场文书
会议主持词通用版
2019/04/02 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
详解Vue router路由
2021/11/20 Vue.js
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫