标签: pprint

Python 3.x:替代pprint实现

pprint处理列表,dicts等时,标准模块很不错.但有时自定义类完全无法使用:

  • 让它打印关于某个类的对象的可用信息的唯一方法是覆盖__repr__,但是如果我的类已经很好了,eval()'能够__repr__不显示我想在pprint输出中看到的信息呢?

  • 好的,我会写面向打印__repr__,但在这种情况下,不可能在我的课程中打印出漂亮的东西:

.

class Data:
    def __init__(self):
        self.d = {...}
Run Code Online (Sandbox Code Playgroud)

我不能打印self.d内容,我只能返回单行表示(至少不使用堆栈跟踪等).- 覆盖PrettyPrinter不是一个选项,我不想每次想要打印相同的类时都这样做.

那么......是否有任何替代pprint允许自定义类可以打印?

python python-3.x pprint

10
推荐指数
1
解决办法
1196
查看次数

我可以在python3中制作pprint而不是在python2中拆分字符串吗?

有没有办法告诉pprintpprintpprint弦乐器上pprint?如果你将长字符串发送到python3中pprint,它将查找pprint并拆分.python2 pprint没有这样做.可以禁用此行为吗?我查看了源代码pprint,看起来并不像我看到的这个选项.

我可以以某种方式欺骗它吗?

这是我得到的一个例子:

>>> PP.pprint("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ",width=-1,compact=True)
('ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ '
 'ZZZZZ')
Run Code Online (Sandbox Code Playgroud)

这就是我想要的:

>>> PP.pprint("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ",width=-1,compact=True)
('ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ')
Run Code Online (Sandbox Code Playgroud)

为了澄清,我确实希望它遵守宽度,而不是字符串.所以当我看到例如:

PP.pprint(["ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZZZZZZZZZ","CATS"])
Run Code Online (Sandbox Code Playgroud)

我想要:

['ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZZZZZZZZZ',
 'CATS']
Run Code Online (Sandbox Code Playgroud)

不:

['ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ '
 'ZZZZZZZZZZZZZ',
 'CATS']
Run Code Online (Sandbox Code Playgroud)

python string python-2.7 python-3.x pprint

10
推荐指数
1
解决办法
1082
查看次数

pprint sort dicts但不是套装?

我知道dicts和sets不是有序的,所以相同的set或dicts可能会以不同的方式打印(所有测试都使用Python 3.6.1):

>>> for obj in {0, 8}, {8, 0}, {0:0, 8:8}, {8:8, 0:0}:
        print(obj)

{0, 8}
{8, 0}
{0: 0, 8: 8}
{8: 8, 0: 0}
Run Code Online (Sandbox Code Playgroud)

我只是意识到pprint("漂亮的印刷品")对dicts进行了排序,但没有设置:

>>> for obj in {0, 8}, {8, 0}, {0:0, 8:8}, {8:8, 0:0}:
        pprint.pprint(obj)

{0, 8}
{8, 0}
{0: 0, 8: 8}
{0: 0, 8: 8}
Run Code Online (Sandbox Code Playgroud)

它的文档还说"字典在计算显示之前按键排序".但为什么不排序?对我来说似乎不太好看.有没有办法让它排序?也在嵌套结构中,因为这是一个主要目的pprint.

python dictionary set python-3.x pprint

10
推荐指数
1
解决办法
401
查看次数

Scala是否提供与Python中的Pretty Print类似的功能?

Scala是否提供与pprintPython中的Pretty Print类似的功能?

scala pprint

9
推荐指数
1
解决办法
1437
查看次数

Python PrettyPrint输出到变量

如何将Python PrettyPrint输出存储到某个变量.

除了eyeD3之外的任何其他方式?

像这样 -

string_output = pp.pprint(dict)
Run Code Online (Sandbox Code Playgroud)

python pprint

9
推荐指数
1
解决办法
4978
查看次数

9
推荐指数
0
解决办法
6260
查看次数

在Clojure中使用自定义方法打印记录

在Clojure 1.5.0中,如何为我自己的记录类型提供自定义漂亮打印机,使用defrecord定义.

(defrecord MyRecord [a b])

(defmethod print-method MyRecord [x ^java.io.Writer writer]
  (print-method (:a x) writer))

(defmethod print-dup MyRecord [x ^java.io.Writer writer]
  (print-dup (:a x) writer))

(println (MyRecord. 'a 'b)) ;; a -- OK
(clojure.pprint/pprint (MyRecord. 'a 'b)) ;; {:a a, :b b} -- not OK, I want a
Run Code Online (Sandbox Code Playgroud)

我也想clojure.pprint/pprint使用我的cutom打印机(现在,a为了便于说明,它应该只是打印出记录领域中的任何内容).

clojure pretty-print pprint multimethod

8
推荐指数
2
解决办法
2224
查看次数

在pprint输出中禁用排序机制

我有正在打印的大词典,可以用prettyprint进行查看,但是如何保持格式但又不能杀死pprint中的排序机制?

python dictionary pretty-print pprint

7
推荐指数
3
解决办法
2381
查看次数

pformat() 输出的缩进

我有一个函数,用于pformat()将字典转换为字符串(无关:字符串稍后将插入到文件write().py)。

所以MY_DCT = {1: 11, 2: 22, 3: 33}会变成这样的字符串:

MY_DCT = {
    1: 11,
    2: 22,
    3: 33}
Run Code Online (Sandbox Code Playgroud)

该功能有2个要求:

  1. 字典项目必须显示在第一行之后。
  2. 元素必须缩进 4 个空格。

这是函数:

import pprint    

def f(obj_name, obj_body_as_dct):

    body = '{\n' + pprint.pformat(obj_body_as_dct, indent=4, width=1)[1:]
    name_and_equal_sign = obj_name + ' = '

    return name_and_equal_sign + body + '\n\n'


d = {1: 11, 2: 22, 3: 33}

print(f('MY_DCT', d))
Run Code Online (Sandbox Code Playgroud)

如果indent=0我得到这个字符串:

MY_DCT = {
1: 11,
2: 22,
3: …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pprint

7
推荐指数
1
解决办法
9382
查看次数

在混合类型的嵌套元组中打印格式化的浮点数

我有一个元组列表,其中元组中的条目是混合类型(int、float、tuple),并且想要在一行上打印列表的每个元素。

示例列表:

 [('520',
     (0.26699505214910974, 9.530913611077067e-22, 1431,
     (0.21819421133984918, 0.31446394340528838), 11981481)),
 ('1219',
     (0.2775519783082116, 2.0226340976042765e-25, 1431,
     (0.22902629625165472, 0.32470159534237308), 14905481))]
Run Code Online (Sandbox Code Playgroud)

我想将每个元组打印为一行,并将浮点数格式化为打印到万分之一:

 [('520', (0.2669, 9.5309e-22, 1431, (0.2181, 0.3144), 11981481)),
 ('1219', (0.2775, 2.0226e-25, 1431, (0.2290, 0.3247), 14905481))]
Run Code Online (Sandbox Code Playgroud)

我过去常常pprint把所有事情都放在一条线上

pprint(myList, depth=3, compact=True)
> ('1219', (0.2775519783082116, 2.0226340976042765e-25, 1431, (...), 14905481))]
Run Code Online (Sandbox Code Playgroud)

但我不确定如何以Python方式正确格式化浮点数。(必须有一种比循环列表、循环每个元组、检查 if-float/if-int/if-tuple 并通过 转换所有浮点数更好的方法"%6.4f" % x)。

python pretty-print pprint

6
推荐指数
1
解决办法
403
查看次数