本文介绍了Python中的pprint模块,它包含了一个“漂亮的打印机”,可以生成数据结构的漂亮视图。格式化工具会生成一些数据结构的表示,这些数据结构不仅能被解释器正确地解释,而且易于人们阅读。输出会尽可能放在一行,分解成多行的时候会缩进。详情请参考以下内容。
目录
一、pprint美工打印数据结构1。打印2。格式3。任意类4。递归5。限制嵌套输出6。控制输出宽度。
一. pprint美观打印数据结构
pprint模块包含一个“漂亮的打印机”来生成数据结构的漂亮视图。格式化工具会生成一些数据结构的表示,这些数据结构不仅能被解释器正确地解释,而且易于人们阅读。输出会尽可能放在一行上,当分成多行时会缩进。
1.打印
从pprint导入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'}),
(3,['m ',' n']),
(4,['o ',' p ',' q']),
(5,['r ',' s ',' t''u ',' v ',' x ',' y ',' z']),
]
打印('打印:')
打印(数据)
打印()
打印(' PPRINT:')
pprint(数据)
Pprint()格式化一个对象,并将其作为参数传递给数据流(或默认的sys.stdout)。
打印:
[(1,{'a': 'A ',' b': 'B ',' c': 'C ',' d': 'D'}),(2,{'e': 'E ',' f': 'F ',' g': 'G ',' h': 'H ',' I ':' I ':' 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 ',
我':'我',
' j': 'J ',
' k': 'K ',
l': 'L'}),
(3,['m ',' n']),
(4,['o ',' p ',' q']),
(5,['r ',' s ',' tu ',' v ',' x ',' y ',' z'])]
2 .格式化
要格式化一个数据结构,而不是将其直接写入一个流(例如,用于日志记录),您可以使用pformat()来构建一个字符串表示。
导入日志记录
从pprint导入p格式
数据=[
(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'}),
(3,['m ',' n']),
(4,['o ',' p ',' q']),
(5,['r ',' s ',' t''u ',' v ',' x ',' y ',' z']),
]
logging.basicConfig(
级别=记录。调试,
format='%(级别名)-8s %(消息)s ',
)
logging.debug('记录格式化数据')
formatted=pformat(数据)
对于formatted.splitlines()中的行:
logging.debug(line.rstrip())
然后,您可以单独打印这个格式化的字符串或记录它。
调试日志格式化数据
DEBUG [(1,{'a': 'A ',' b': 'B ',' c': 'C ',' d': 'D'}),
调试(2、
调试{ ' E ':E ',
调试“F”:“F”,
调试' g': 'G ',
调试“H”:“H”,
调试“I”:“I”,
调试“J”:“J”,
调试“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类也可以处理这样的自定义类。
从pprint导入pprint
类节点:
def __init__(self,name,contents=[]):
self.name=name
self.contents=contents[:]
def __repr__(self):
返回(
节点(' repr(self.name)','
repr(self.contents)')'
)
树=[
节点(“节点1”),
节点('节点2 ',[节点('节点2-1')]),
节点('节点3 ',[节点('节点3-1')]),
]
pprint(树)
使用由PrettyPrinter组合的嵌套对象的表示形式返回完整的字符串表示形式。
[节点(' node-1 ',[]),
node('node-2 ',[node('node-2-1 ',[])]),
node('node-3 ',[node('node-3-1 ',[])])]
4. 递归
递归数据结构通过对id=number的typename以递归形式引用原始数据源来表示。
从pprint导入pprint
local_data=['a ',' b ',1,2]
本地数据.追加(本地数据)
打印(' id(local_data)=',id(local_data))
pprint(本地数据)
在这个例子中,列表local_data被添加到自身,这创建了一个递归引用。
id(本地数据)=2763816527488
['a ',' b ',1,2,id=2763816527488的列表上的递归]
5. 限制嵌套输出
对于非常深的数据结构,可能不需要在输出中包含所有细节。数据格式可能不正确,格式化的文本可能太大而无法管理,或者某些数据可能是冗余的。
从pprint导入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'}),
(3,['m ',' n']),
(4,['o ',' p ',' q']),
(5,['r ',' s ',' t''u ',' v ',' x ',' y ',' z']),
]
pprint(数据,深度=1)
pprint(数据,深度=2)
使用depth参数控制漂亮的打印机递归处理嵌套数据结构的深度。未包含在输出中的级别用省略号表示。
[(.), (.), (.), (.), (.)]
[(1, {.}), (2, {.}), (3, [.]), (4, [.]), (5, [.])]
6.控制输出宽度
格式化文本的默认输出宽度是80列。要调整这个宽度,可以使用pprint()中的参数width。
从pprint导入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'}),
(3,['m ',' n']),
(4,['o ',' p ',' q']),
(5,['r ',' s ',' t''u ',' v ',' x ',' y ',' z']),
]
对于[80,5]中的宽度:
打印(' WIDTH=',宽度)
pprint(数据,宽度=宽度)
打印()
当宽度过小不符合格式数据结构时,如果截断或换行会导致语法不合法,则不截断或换行。
宽度=80
[(1,{'a': 'A ',' b': 'B ',' c': 'C ',' d': 'D'}),
(2,
{'e': 'E ',
' f': 'F ',
' g': 'G ',
h': 'H ',
我':'我',
' j': 'J ',
' k': 'K ',
l': 'L'}),
(3,['m ',' n']),
(4,['o ',' p ',' q']),
(5,['r ',' s ',' tu ',' v ',' x ',' y ',' z'])]
宽度=5
[(1,
{'a': 'A ',
' b': 'B ',
c': 'C ',
d': 'D'}),
(2,
{'e': 'E ',
' f': 'F ',
' g': 'G ',
h': 'H ',
我':'我',
' j': 'J ',
' k': 'K ',
l': 'L'}),
(3,
['m ',
n']),
(4,
['o ',
p ',
q']),
(5,
['r ',
s ',
'你',
v ',
x ',
y ',
z'])]
compact标志告诉pprint()尝试在每行上放置更多的数据,而不是将复杂的数据结构分成多行。
从pprint导入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'}),
(3,['m ',' n']),
(4,['o ',' p ',' q']),
(5,['r ',' s ',' t''u ',' v ',' x ',' y ',' z']),
]
对于[80,5]中的宽度:
打印(' WIDTH=',宽度)
pprint(数据,宽度=宽度)
打印()
这个例子表明,当一个数据结构不适合另一行时,它将会崩溃(数据列表中的第二项也是如此)。如果多个元素可以放在一行上(如第三和第四个成员),它们将被放在同一行上。
宽度=80
[(1,{'a': 'A ',' b': 'B ',' c': 'C ',' d': 'D'}),
(2,
{'e': 'E ',
' f': 'F ',
' g': 'G ',
h': 'H ',
我':'我',
' j': 'J ',
' k': 'K ',
l': 'L'}),
(3,['m ',' n']),
(4,['o ',' p ',' q']),
(5,['r ',' s ',' tu ',' v ',' x ',' y ',' z'])]
宽度=5
[(1,
{'a': 'A ',
' b': 'B ',
c': 'C ',
d': 'D'}),
(2,
{'e': 'E ',
' f': 'F ',
' g': 'G ',
h': 'H ',
我':'我',
' j': 'J ',
' k': 'K ',
l': 'L'}),
(3,
['m ',
n']),
(4,
['o ',
p ',
q']),
(5,
['r ',
s ',
'你',
v ',
x ',
y ',
z'])]
关于Python中pprint模块的这篇文章到此为止。有关Python中Pprint模块的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。