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创建临时文件夹的方法
Jul 06 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
Python调用C语言的方法【基于ctypes模块】
Jan 22 Python
python pygame实现2048游戏
Nov 20 Python
python 同时运行多个程序的实例
Jan 07 Python
python3.6 如何将list存入txt后再读出list的方法
Jul 02 Python
解决python 读取excel时 日期变成数字并加.0的问题
Oct 08 Python
Python中base64与xml取值结合问题
Dec 22 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 Python
Python中的min及返回最小值索引的操作
May 10 Python
浅谈Python中的函数(def)及参数传递操作
May 25 Python
在Python 中将类对象序列化为JSON
Apr 06 Python
python 多态 协议 鸭子类型详解
Nov 27 #Python
Python机器学习实战之k-近邻算法的实现
Python Django项目和应用的创建详解
python playwright 自动等待和断言详解
Nov 27 #Python
Python实现制作销售数据可视化看板详解
Python 如何利用ffmpeg 处理视频素材
实操Python爬取觅知网素材图片示例
You might like
提升PHP速度全攻略
2006/10/09 PHP
php zend 相对路径问题
2009/01/12 PHP
那些年一起学习的PHP(三)
2012/03/22 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
执行iframe中的javascript方法
2008/10/07 Javascript
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
2021/01/18 Javascript
Python base64编码解码实例
2015/06/21 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
python连接mongodb集群方法详解
2020/02/13 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
《北大荒的秋天》教学反思
2014/04/14 职场文书
个人年度总结报告
2015/03/09 职场文书
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript