pprint模块(数据漂亮打印机)

pprint模块(lib / pprint.py)是Python标准库的一部分,该标准库与标准Python发行版一起分发。pprint名称代表漂亮的打印机。pprint模块的功能可实现Python数据结构的美观外观。可以由Python解释器正确解析的任何数据结构都经过雅致的格式化。格式化的表达式尽可能保持在一行中,但是如果长度超过格式化的width参数,则会分成多行。pprint输出的一个独特功能是,在格式化显示格式之前,字典会自动排序。

pprint模块包含PrettyPrinter类的定义。其构造函数采用以下格式-

pprint.PrettyPrinter(indent, width, depth, stream, compact)

indent参数定义在每个递归级别上添加的缩进。默认值为1。

默认情况下,width参数为80。所需的输出受该值限制。如果长度大于宽度,则将其分成多行。

深度参数控制要打印的级别数。

默认情况下,stream参数为std.out –默认输出设备。它可以接受任何流对象,例如文件。

默认情况下,紧凑参数ID设置为False。如果为true,则仅显示宽度可调的数据。

PrettyPrinter类定义以下方法-

pprint() -打印PrettyPrinter对象的格式化表示

pformat() -根据构造函数的参数返回对象的格式化表示形式。

下面的示例演示了PrettyPrinter类的简单用法。

import pprint

students = {"Dilip":["English", "Maths", "Science"],

   "Raju":{"English":50,"Maths":60, "Science":70},

   "Kalpana":(50,60,70)}

pp = pprint.PrettyPrinter()

print ("normal print output")

print (students)

print ("----")

print ("pprint output")

pp.pprint(students)

输出显示正常和漂亮的打印显示。

normal print output

{'Dilip': ['English', 'Maths', 'Science'], 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}, 'Kalpana': (50, 60, 70)}

----

pprint output

{'Dilip': ['English', 'Maths', 'Science'],

'Kalpana': (50, 60, 70),

'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}

pprint模块还定义了便捷功能,pprint()并且pformat()对应于PrettyPrinter方法。下面的示例使用pprint()函数。

from pprint import pprint

students = {"Dilip":["English", "Maths", "Science"],

"Raju":{"English":50,"Maths":60, "Science":70},

"Kalpana":(50,60,70)}

print ("normal print output")

print (students)

print ("----")

print ("pprint output")

pprint (students)

下一个示例使用pformat()方法和pformat()函数。要使用pformat()方法,首先设置PrettyPrinter对象。在两种情况下,格式化的表示都使用常规print()方法显示。

import pprint

students = {"Dilip":["English", "Maths", "Science"],

"Raju":{"English":50,"Maths":60, "Science":70},

"Kalpana":(50,60,70)}

print ("using pformat method")

pp = pprint.PrettyPrinter()

string = pp.pformat(students)

print (string)

print ('------')

print ("using pformat function")

string = pprint.pformat(students)

print (string)

这是上面代码的输出

using pformat method

{'Dilip': ['English', 'Maths', 'Science'],

'Kalpana': (50, 60, 70),

'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}

------

using pformat function

{'Dilip': ['English', 'Maths', 'Science'],

'Kalpana': (50, 60, 70),

'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}

漂亮的打印机也可以与自定义类一起使用。在类__repr __()方法内部被重写。repr()使用函数时会调用__repr __()方法。它是Python对象的正式字符串表示形式。当我们使用对象作为print()函数的参数时,它会打印函数的返回值repr()

在下面的示例中,__repr __()方法返回播放器对象的字符串表示形式

import pprint

class player:

def __init__(self, name, formats = [], runs = []):

self.name = name

self.formats = formats

self.runs = runs

def __repr__(self):

dct = {}

dct[self.name] = dict(zip(self.formats,self.runs))

return (repr(dct))

l1 = ['Tests','ODI','T20']

l2 = [[140, 45, 39],[15,122,36,67, 100, 49],[78,44, 12, 0, 23, 75]]

p1 = player("virat",l1,l2)

pp = pprint.PrettyPrinter()

pp.pprint(p1)

上面的代码的输出是-

{'virat': {'Tests': [140, 45, 39], 'ODI': [15, 122, 36, 67, 100, 49], 'T20': [78, 44, 12, 0, 23, 75]}}

带pprint的递归数据结构

当我们尝试使用pprint打印递归对象时,仅显示第一个表示形式,而对于后续的递归,仅显示其引用。

>>> import pprint

>>> numbers = list(range(1,6))

>>> numbers.append(numbers)

>>> print (numbers)

[1, 2, 3, 4, 5, [...]]

>>> pprint.pprint(numbers)

[1, 2, 3, 4, 5, <Recursion on list with id=1403633698824>]

限制输出宽度

如果将width参数从默认值80更改为其他值,则将以如下格式设置输出的格式:显示多行,同时注意不要违反语法。

import pprint

students = {"Dilip":["English", "Maths", "Science"],

"Raju":{"English":50,"Maths":60, "Science":70},

"Kalpana":(50,60,70)}

pp=pprint.PrettyPrinter(width = 20)

pp.pprint(students)

该代码类似于本文的第一个示例。但是,PrettyPrinter对象的宽度参数为20。因此,将对pprint输出进行格式化。

{'Dilip': [ 'English',

   'Maths',

   'Science'],

'Kalpana': (50,

   60,

   70),

'Raju': {'English': 50,

   'Maths': 60,

   'Science': 70}}

以上是 pprint模块(数据漂亮打印机) 的全部内容, 来源链接: utcz.com/z/347125.html

回到顶部