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

1.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())
然后可以单独打印这个格式化的字符串或者记入日志。

1.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组合的嵌套对象的表示来返回完整的字符串表示。

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增加到其自身,这会创建一个递归引用。

1.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.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()
当宽度太小而不能满足格式化数据结构时,倘若截断或转行会导致非法语法,那么便不会截断或转行。


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


Python3标准库:pprint美观打印数据结构的更多相关文章
- Python3标准库:struct二进制数据结构
1. struct二进制数据结构 struct模块包括一些函数,这些函数可以完成字节串与原生Python数据类型(如数字和字符串)之间的转换. 1.1 函数与Struct类 struct提供了一组处理 ...
- 3.Python3标准库--数据结构
(一)enum:枚举类型 import enum ''' enum模块定义了一个提供迭代和比较功能的枚举类型.可以用这个为值创建明确定义的符号,而不是使用字面量整数或字符串 ''' 1.创建枚举 im ...
- 8.Python3标准库--数据持久存储与交换
''' 持久存储数据以便长期使用包括两个方面:在对象的内存中表示和存储格式之间来回转换数据,以及处理转换后数据的存储区. 标准库包含很多模块可以处理不同情况下的这两个方面 有两个模块可以将对象转换为一 ...
- 7.Python3标准库--文件系统
''' Python的标准库中包含大量工具,可以处理文件系统中的文件,构造和解析文件名,还可以检查文件内容. 处理文件的第一步是要确定处理的文件的名字.Python将文件名表示为简单的字符串,另外还提 ...
- Python3 标准库
Python3标准库 更详尽:http://blog.csdn.net/jurbo/article/details/52334345 文本 string:通用字符串操作 re:正则表达式操作 diff ...
- 1.Python3标准库--前戏
Python有一个很大的优势便是在于其拥有丰富的第三方库,可以解决很多很多问题.其实Python的标准库也是非常丰富的,今后我将介绍一下Python的标准库. 这个教程使用的书籍就叫做<Pyth ...
- python023 Python3 标准库概览
Python3 标准库概览 操作系统接口 os模块提供了不少与操作系统相关联的函数. >>> import os >>> os.getcwd() # 返回当前的工作 ...
- 比较两个文件的异同Python3 标准库difflib 实现
比较两个文件的异同Python3 标准库difflib 实现 对于要比较两个文件特别是配置文件的差异,这种需求很常见,如果用眼睛看,真是眼睛疼. 可以使用linux命令行工具diff a_file b ...
- python3标准库总结
Python3标准库 操作系统接口 os模块提供了不少与操作系统相关联的函数. ? 1 2 3 4 5 6 >>> import os >>> os.getcwd( ...
随机推荐
- 高通量计算框架HTCondor(三)——使用命令
目录 1. 目录 2. 进程 3. 命令 3.1. condor_q 3.2. condor_status 3.3. conodr_submit 3.4. conodr_rm 4. 相关 1. 目录 ...
- 「 深入浅出 」集合Map
系列文章: 「 深入浅出 」java集合Collection和Map 「 深入浅出 」集合List 「 深入浅出 」集合Set 前面已经介绍完了Collection接口下的集合实现类,今天我们来介绍M ...
- 关于Spring集成Quartz的concurrent属性
关于Spring集成Quartz的concurrent属性 以前经常在任务调度程序中使用Spring集成的Quartz,这种方式可以用简单的声明式配置即可实现定时任务,并结合了Spring自身的Bea ...
- 1、python3.x安装(windows)
现在大部分自动化测试已经使用python3.x版本,与Python2的区别这里就不多说了,如有兴趣可以自行百度. 一.下载 官网:https://www.python.org/downloads/,下 ...
- 玩转Django2.0---Django笔记建站基础九(一)(Auth认证系统)
第九章 Auth认证系统 Django除了有强大的Admin管理系统之外,还提供了完善的用户管理系统.整个用户管理系统可分为三大部分:用户信息.用户权限和用户组,在数据库中分别对应数据表auth_us ...
- C++内存管理与注意事项
内存是程序运行必不可少的资源,由操作系统分配和管理.作为程序员,我们通常做的只能是申请和归还.本文主要介绍C++内存的申请和释放(归还),以及注意事项. 1 申请和释放内存的运算符 申请 new 释放 ...
- JS-04-流程控制和循环
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Web前端-HTML、CSS、JS
概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,它是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他, 这样就可以让浏览 ...
- Oracle批量创建同义词
一.介绍 Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系.它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用 ...
- WPF另类实现摄像头录像
WPF中使用第三方控件来直接进行录像的控件没有找到(aforgenet好像不维护了?WPFMediaKit好像只能实现摄像头拍照.收费的控件没有使用,不做评论.) 通过百度(感谢:https://ww ...