在进行代码调试时,能够清晰地输出数据结构对于理解程序的运行状态至关重要。本文将介绍Python中一个名为pprint的内置库,它是一个数据美化打印工具,可以帮助更有效地处理和展示大量数据。无论是处理JSON文件还是操作字典,pprint都能助一臂之力。告别混乱的输出和复杂的结构,最重要的是,pprint是Python内置的库,无需额外安装。让一起深入了解,让输出更加亮眼!
本文是数据科学博客大赛的一部分。
pprint是“Pretty Print”的缩写,它是Python的一个原生库,允许通过其众多参数和标志来自定义输出。以下是官方文档,列出了它的所有属性和用法。
pprint库只包含一个名为pprint的类。总共有六个参数可以与这个类一起使用。以下是参数的简短描述及其默认值:
indent: 每行的缩进空格数,当需要特定格式时很有帮助,默认值为1。
width: 单行最大字符数。如果单词数量超过此限制,剩余文本将换行显示在下面的行中,默认值为80。
depth: 在使用嵌套数据类型时显示的深度级别数。默认情况下,它显示所有数据,但如果指定,则深度级别之外的数据将显示为一系列点(...)。默认值为None。
stream: 用于指定输出流,主要用于美化打印文件。默认行为是使用sys.stdout,默认值为None。
compact: 这是一个布尔参数。如果设置为True,它将把复杂数据结构合并到单行中,在指定宽度内。如果值为默认值(即False),所有项目将在单独的行上格式化,默认值为False。
sort_dicts: 这也是一个布尔参数。在使用pprint()打印字典时,它会根据键名的字母顺序打印键值对。当设置为false时,键值对将根据它们的插入顺序显示,默认值为True。
现在,让进入编程部分!
首先,在笔记本的开头导入pprint模块。
import pprint
pprint.pprint("Hello World!")
my_printer = pprint.PrettyPrinter()
my_printer.pprint("Hello Pretty Printer")
print(type(my_printer))
现在让创建一个示例字典来演示类的参数。
sample_dict = {
'name': 'Sion',
'age': 21,
'message': 'Thank you for reading this article!',
'topic':'Python Libraries'
}
如果简单地使用print打印这个字典,得到的是:
{'name': 'Sion', 'age': 21, 'message': 'Thank you for reading this article!', 'topic': 'Python Libraries'}
这看起来并不那么吸引人,对吧?但仍然有人可能会争辩说,这种输出格式是可以接受的,因为可以看到哪个值属于哪个键,但如果这些值非常长,并且嵌套,或者键值对的数量多得多呢?那时一切都会变得非常糟糕。它将变得非常非常难以阅读,但不用担心,pprint来拯救:
pprint.pprint(sample_dict)
首先,所有的配对都有它们自己的行,这大大提高了可读性。此外,如果仔细观察,所有元素都会自动根据键进行排序。
pprintpp模块是Python内置pprint模块的增强版本。它提供了高级美化打印功能,允许以更易读和视觉上吸引人的方式格式化复杂的数据结构。有了pprintpp,可以轻松处理嵌套对象、字典、列表和其他数据结构。其改进的格式化选项使其成为在清晰简洁的方式中显示大量数据的绝佳选择。在Python项目中探索pprintpp的强大功能,提升数据可视化和调试能力。
阅读更多:如何在Python中读取常见文件格式 - CSV、Excel、JSON等!
文本换行是另一个基本用法。假设不仅仅满足于将键值对打印在单独的行上,而是希望当行的长度超过一定数量时文本能够换行。为此,可以使用width参数。
pprint.pprint(sample_dict, width = 30)
此外,可以使用indent参数在每一行前面添加缩进,以提高可读性。
pprint.pprint(sample_dict, width = 30, indent = 10)
以下是compact和width参数的使用示例:
import pprint
stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
stuff.insert(0, stuff[:])
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(stuff)
pp = pprint.PrettyPrinter(width=41, compact=True)
pp.pprint(stuff)
有时在处理高度嵌套的对象时,只想查看外层值,对更深层次的值不感兴趣。例如,如果有一个像这样的嵌套元组:
sample_tuple = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', ('parrot', ('fresh fruit',))))))))
如果使用print或pprint,输出将几乎相同:
print(sample_tuple)
pp.pprint(sample_tuple)
然而,如果指定了depth参数,任何深度超过该参数的值都将被截断:
pprint.pprint(sample_tuple, depth=2)
pprint.pprint(sample_tuple, depth=1)
p = pprint.PrettyPrinter(depth=6)
p.pprint(sample_tuple)
pprint()和PrettyPrinter()之间的差异在于,pprint()方法使用库的默认参数和设置,可以像之前看到的那样更改它们,但这些更改是临时的。而PrettyPrinter()允许创建一个类,用自己的规范覆盖默认设置,创建永久的类对象,这些对象在项目中始终保持其形式和值。
import pprint
coordinates = [
{
"name": "Location 1",
"gps": (29.008966, 111.573724)
},
{
"name": "Location 2",
"gps": (40.1632626, 44.2935926)
},
{
"name": "Location 3",
"gps": (29.476705, 121.869339)
}
]
pprint.pprint(coordinates, depth=1)
p = pprint.PrettyPrinter(depth=1)
p.pprint(coordinates)
常见问题:
Q1. pprint有什么用?
A. pprint(美化打印)是一个Python模块,用于更易读和有组织地格式化复杂的数据结构,特别是当将它们打印到控制台或写入文件时。
Q2. print和Pprint有什么区别?
A. print和Pprint的主要区别在于Pprint旨在格式化复杂的数据结构,如字典和列表,保留它们的结构并提供缩进。相比之下,print用于简单的值或字符串输出。
Q3. Pprint是Python的标准模块吗?
A. Pprint不是Python的标准内置模块,但它包含在Python标准库中,这意味着它在大多数Python安装中默认可用。
Q4. Pprint是Python的原生模块吗?
A. 是的,Pprint是Python的原生模块,因为它包含在Python标准库中,允许开发者无需外部依赖或安装即可使用其功能。