Python中使用pprint函数进行格式化输出的教程

作者: 日期:2019-10-03

作用:美观打印数据结构

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

以下实例用用到的data包含一下数据

data = [,
 函数

from pprint import pprint
print 'PRINT:'
print data
print 
print 'PPRINT:'
pprint

运行结果:
 

PRINT:
[, ]
PPRINT:
[,
 {'e': 'E',
 'f': 'F',
 'g': 'G',
 'h': 'H',
 'i': 'I',
 'j': 'J',
 'k': 'K',
 'l': 'L'})]

pprint格式化一个对象,并把它写至一个数据流,这个数据流作为参数传入

注意为什么第二个字典中会显示一竖列,因为pprint打印支持8个对象以上的竖列打印

2、  格式化

格式化一个数据结构而不把它直接写至一个流,可以使用pformat来构造一个字符串表示。 
 

import logging
from pprint import pformat
logging.basicConfig-8s %s',
logging.debug
formatted = pformat
for line in formatted.splitlines:
 logging.debug)

运行结果:
 

DEBUG Logging pformatted data
DEBUG [,
DEBUG ]

然后可以单独低打印格式化的字符串或者计入日志

splitlines 按行分割

rstrip去除右边的空格 lstrip去除左边的空格 strip去除两边空格。默认为去除空格,也可以传入需要从两边或者其中一边去除的字符,如strip就是去除字符串两边的字符'a'
3、  任意类

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

from pprint import pprint 
class node:
 def __init__:
 self.name = name
 self.contents = contents[:]
 def __repr__:
 return  + ',' +
 repr + ')'
trees = [node,
 node]),
 node]), 
pprint

运行结果:
 

[node,
 node]),
 node])]

由PrettyPrinter组合嵌套对象的表示,从而返回完整字符串表示。
 4、  递归

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

from pprint import pprint 
local_data = ['a','b',1,2]
local_data.append
print 'id = ',id
pprint
print local_data

运行结果:
 

id = 47458332363520
['a', 'b', 1, 2, Recursion on list with id=47458332363520 ]
['a', 'b', 1, 2, [...]]

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

内置函数id作用是获得对象的id值,理论上讲每个对象都有一个id值,如果是整数和字符串,那么相同的值会有相同的id值,但是如果是类,及时相同也会有不同的id值。测试如下:

#int or float or lon 都一样
a = 65464131311513l
b = 65464131311513l
c = 65464131311513l
print id
print id
print id
print
a = '12312312'
b = '12312312'
c = '12312312'
print id
print id
print id
print 
a = 65464131311513l*11
b = 65464131311513l*11
c = 65464131311513l*11
print id
print id
print id
print
a = '12312312'*11
b = '12312312'*11
c = '12312312'*11
print id
print id
print id
print 
class Test:
 def __init__:
 pass
a = Test
b = Test
c = Test
print id
print id
print id
print

测试结果:

47010342174992
47010342174992
47010342174992
from pprint import pprint
print 'PRINT:'
print data
print 
print 'PPRINT:'
pprint


PRINT:
[, ]
PPRINT:
[,
 {'e': 'E',
 'f': 'F',
 'g': 'G',
 'h': 'H',
 'i': 'I',
 'j': 'J',
 'k': 'K',
 'l': 'L'})]

pprint格式化一个对象,并把它写至一个数据流,这个数据流作为参数传入

注意为什么第二个字典中会显示一竖列,因为pprint打印支持8个对象以上的竖列打印

2、  格式化



import logging
from pprint import pformat
logging.basicConfig-8s %s',
logging.debug
formatted = pformat
for line in formatted.splitlines:
 logging.debug)


DEBUG Logging pformatted data
DEBUG [,
DEBUG ]

然后可以单独低打印格式化的字符串或者计入日志

splitlines 按行分割

rstrip去除右边的空格 lstrip去除左边的空格 strip去除两边空格。默认为去除空格,也可以传入需要从两边或者其中一边去除的字符,如strip就是去除字符串两边的字符'a'
3、  任意类




from pprint import pprint 
class node:
 def __init__:
 self.name = name
 self.contents = contents[:]
 def __repr__:
 return  + ',' +
 repr + ')'
trees = [node,
 node]),
 node]), 
pprint


[node,
 node]),
 node])]

由PrettyPrinter组合嵌套对象的表示,从而返回完整字符串表示。
 4、  递归




from pprint import pprint 
local_data = ['a','b',1,2]
local_data.append
print 'id = ',id
pprint
print local_data


id = 47458332363520
['a', 'b', 1, 2, Recursion on list with id=47458332363520 ]
['a', 'b', 1, 2, [...]]

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

内置函数id作用是获得对象的id值,理论上讲每个对象都有一个id值,如果是整数和字符串,那么相同的值会有相同的id值,但是如果是类,及时相同也会有不同的id值。测试如下:

#int or float or lon 都一样
a = 65464131311513l
b = 65464131311513l
c = 65464131311513l
print id
print id
print id
print
a = '12312312'
b = '12312312'
c = '12312312'
print id
print id
print id
print 
a = 65464131311513l*11
b = 65464131311513l*11
c = 65464131311513l*11
print id
print id
print id
print
a = '12312312'*11
b = '12312312'*11
c = '12312312'*11
print id
print id
print id
print 
class Test:
 def __init__:
 pass
a = Test
b = Test
c = Test
print id
print id
print id
print

测试结果:

47010342174992
47010342174992
47010342174992
首页
电话
短信
联系