5.8 pprint--美观地打印数据

pprint模块提供了一个美观地打印Python数据结构的方式。如果是要格式化的数据结构里包含了非基本类型的数据,有可能这种数据类型不会被加载。比如数据类型是文件、网络socket、类等。本模块格式化时,尽可能保持一个对象一行表示,并且当超过允许宽度时也会自动换行表示。所有字典数据类型,都会先按键来排序,然后再进行格式化输出。

class pprint.PrettyPrinter(indent=1, width=80, depth=None, stream=None, *, compact=False)

构造一个打印实例PrettyPrinter。这个构造函数需要好几个参数来配置打印参数。可以通过参数stream来设置流输出对象,流输出对象要实现write()的文件协议。如果没有指定流输出对象,默认是输出到sys.stdout。每行递归缩进的宽度是通过indent来设置,默认设置为1。参数width是表示每行的宽度,如果超过一行的宽度就会换行输出。参数depth是表示复合对象输出的层次深度,默认是没有限制,所有层次的对象都输出。参数compact是表示换行时下一行是否输出内容,还是跳过。

例子:

#python 3.4

import pprint

stuff = [‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘]

stuff.insert(0, stuff[:])

print(stuff, ‘\n‘)

pp = pprint.PrettyPrinter(indent=4)

pp.pprint(stuff)

结果输出如下:

[[‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘], ‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘]

[   [‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘],

‘spam‘,

‘eggs‘,

‘lumberjack‘,

‘knights‘,

‘ni‘]

pprint.pformat(object, indent=1, width=80, depth=None, *, compact=False)

把object对象格式化为字符串返回。其它参数与上面的函数一样。

例子:

#python 3.4

import pprint

stuff = [‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘]

stuff.insert(0, stuff[:])

str = pprint.pformat(stuff)

print(str)

结果输出如下:

[[‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘],

‘spam‘,

‘eggs‘,

‘lumberjack‘,

‘knights‘,

‘ni‘]

pprint.pprint(object, stream=None, indent=1, width=80, depth=None, *, compact=False)

打印所有格式化的对象到流对象stream里,并添加新换行符。如果stream为空,就使用默认的sys.stdout。其它参数与上面函数一样。

例子:

#python 3.4

import pprint

stuff = [‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘]

stuff.insert(0, stuff[:])

str = pprint.pprint(stuff)

结果输出如下:

[[‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘],

‘spam‘,

‘eggs‘,

‘lumberjack‘,

‘knights‘,

‘ni‘]

pprint.isreadable(object)

判断对象object格式化表示的字符串是否可读,或者能使用eval()函数执行。如果可读的返回True。如果对象是递归的,则返回False。

例子:

#python 3.4

import pprint

stuff = [‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘]

stuff.insert(0, stuff[:])

print(pprint.isreadable(stuff))

结果输出如下:

True

pprint.isrecursive(object)

判断对象object是否递归表示。

例子:

#python 3.4

import pprint

stuff = [‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘]

stuff.insert(0, stuff[:])

print(pprint.isrecursive(stuff))

结果输出如下:

False

pprint.saferepr(object)

针对递归对象进行显示时提示递归字符串。

例子:

#python 3.4

import pprint

stuff = [‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘]

stuff.insert(0, stuff)

print(pprint.isrecursive(stuff))

print(pprint.saferepr(stuff))

结果输出如下:

True

[<Recursion on list with id=47354104>, ‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘]

PrettyPrinter类主要有下面方法:

PrettyPrinter.pformat(object)

PrettyPrinter.pprint(object)

PrettyPrinter.isreadable(object)

PrettyPrinter.isrecursive(object)

PrettyPrinter.format(object, context, maxlevels, level)

这些方法跟上面的函数使用是一样的。

蔡军生  QQ:9073204  深圳

时间: 2024-12-28 14:37:08

5.8 pprint--美观地打印数据的相关文章

如何美观地打印 Python 对象?这个标准库可以简单实现

前不久,我写了一篇文章回顾 Python 中 print 的发展历史 ,提到了两条发展线索: 明线:早期的 print 语句带有 C 和 Shell 的影子,是个应用程序级的 statement,在最初十几年里,经历过 PEP-214 和 PEP-259 的改进:再到 2009 年的大版本 3.0,由语句改成了 print() 函数,还在 3.3 版本,做过一次功能增强,最终上升成为一等的内置函数. 暗线:介绍了 print 的竞争对手们,像传统的日志模块 logging.调试模块 pdb.主流

【转】如何美观地打印 Python 对象?

pprint 是“pretty printer”的简写,“pretty”的含义是“漂亮的.美观的”,还有表示“相当地”的程度语气,因此它的含义便是:(相当)美观的打印. 这是个相当简单却有用的模块,主要用于打印复杂的数据结构对象,例如多层嵌套的列表.元组和字典等. 先看看 print() 打印的一个例子: mylist = ["Beautiful is better than ugly.", "Explicit is better than implicit.",

多线程-生产者与消费者(存储数据与打印数据)

无线程同步: 存储数据: 1 public class Storage { 2 int data; 3 4 public int getData() { 5 return data; 6 } 7 8 public void setData(int data) { 9 this.data = data; 10 } 11 12 } 产生数据: 1 public class Counter implements Runnable { 2 private Storage storage; 3 4 pub

linux内核打印数据到串口控制台,printk数据不打印问题

linux内核打印数据到串口控制台问题 原文来源:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.查看当前控制台的打印级别 cat /proc/sys/kernel/printk 4    4    1    7 其中第一个“4”表示内核打印函数printk的打印级别,只有级别比他高的信息才能在控制台上打印出来,既 0-3级别的信息 2.修改打印 echo "新的打印级别  4    1    7" >/proc/sys/kernel/pr

我常用的自定义函数之p 用于打印数据,调试代码很方便

我常用,主要用于打印数据,看起来特别简洁,当然函数还可以写的更具体 1 function p($arr){ 2 header('content-type:text/html;charset=utf8'); 3 if(is_string($arr)){ 4 echo $arr; 5 }else if(is_array($arr)){ 6 echo "<pre>"; 7 print_r($arr); 8 echo "</pre>"; 9 }els

angular2动态增加一行组件和删除组件示例改进版(增加了添加数据、清空数据、打印数据功能)

初始效果 点击添加行  点击添加数据  点击打印数据  点击清空数据 TS 部分代码讲解 /** * 获取数组对象 */ get arrayList() { return this.fg.get('arrayList') as FormArray; } 获取的 HTML页面的控件arrayList 对象 /** * 添加数据 */ addData(){ this.arrayList.controls.forEach((item,index)=>{ //此处的this.arrayList出自 ge

Qt编写的项目作品18-数据导出到Excel及Pdf和打印数据

一.功能特点 原创导出数据机制,不依赖任何office组件或者操作系统等第三方库,尤其是支持嵌入式linux. 10万行数据9个字段只需要2秒钟完成. 只需要四个步骤即可开始急速导出大量数据到Excel. 同时提供直接写入数据接口和多线程写入数据接口,不卡主界面. 可设置标题.副标题.表名. 可设置字段名称.列宽度. 可设置是否启用校验过滤数据.校验的列.校验规则.校验值,符合规则的特殊颜色显示. 可设置随机背景颜色及需要随机背景色的列集合. 支持分组输出数据,比如按照设备分组输出数据,方便查看

第6课第2节_Binder系统_驱动情景分析_打印数据交互过程

添加宏: 功能:把NAME(n) 中的n作为字符串返回,eg:BR_NOOP作为字符串返回 BR开头:Binder--->IPC BC开头:IPC------>Binder #define NAME(n) case n: return #n const char *binder_cmd_name(uint32_t cmd) { switch(cmd) { NAME(BR_NOOP); NAME(BR_TRANSACTION_COMPLETE); NAME(BR_INCREFS); NAME(B

使用QPrinter生成pdf或用打印机打印数据

1.使用html生成表格 QString wesiOperateWidget::MakeDataToHtml() { //表头 //html = "<table width=100% border=1 cellspacing=0 text-align=center style=border-collapse:collapse>"; //html += "<tr>"; //html += "<th>编号</th>