gpt4 book ai didi

python - 实现自定义 pretty-print 的最佳方法

转载 作者:IT老高 更新时间:2023-10-28 20:42:09 29 4
gpt4 key购买 nike

自定义pprint.PrettyPrinter

pprint 模块的文档提到方法 PrettyPrinter.format 旨在使自定义格式成为可能。

我认为可以在子类中重写此方法,但这似乎没有提供让基类方法应用换行和缩进的方法。

  • 我在这里遗漏了什么吗?
  • 有没有更好的方法来做到这一点(例如另一个模块)?

替代方案?

我查看了 pretty模块,看起来很有趣,但似乎没有提供一种在不修改其他模块的情况下自定义其他模块的类格式的方法。

我认为我正在寻找的东西可以让我提供类型(或者可能是函数)的映射,以识别类型到处理节点的例程。处理节点的例程将获取一个节点并返回它的字符串表示形式,以及一个子节点列表。以此类推。

为什么我要研究 pretty-print

我的最终目标是紧凑地打印 DocBook 格式的 xml.etree.ElementTree 的自定义格式部分。

(我很惊讶没有找到更多 Python 对 DocBook 的支持。也许我在那里遗漏了一些东西。)

我在一个名为 xmlearn 的客户端中构建了一些基本功能。使用 lxml .例如,要转储 Docbook 文件,您可以:

xmlearn -i docbook_file.xml dump -f docbook -r book

这很糟糕,但它为我提供了我正在寻找的信息。

xmlearn还有其他功能,例如构建图形图像和转储显示 XML 文档中标签之间的关系的能力。这些与这个问题几乎完全无关。

您还可以执行转储到任意深度,或指定 XPath 作为一组起点。 XPath 的东西有点过时了特定于 docbook 的格式,所以这并不是很好的开发。

这仍然不是问题的真正答案。我仍然希望在某个地方有一台易于定制的 pretty-print 。

最佳答案

我的解决方案是用一个简单的包装器替换 pprint.PrettyPrinter,该包装器在调用原始打印机之前格式化它找到的任何 float 。

from __future__ import division
import pprint
if not hasattr(pprint,'old_printer'):
pprint.old_printer=pprint.PrettyPrinter

class MyPrettyPrinter(pprint.old_printer):
def _format(self,obj,*args,**kwargs):
if isinstance(obj,float):
obj=round(obj,4)
return pprint.old_printer._format(self,obj,*args,**kwargs)
pprint.PrettyPrinter=MyPrettyPrinter

def pp(obj):
pprint.pprint(obj)

if __name__=='__main__':
x=[1,2,4,6,457,3,8,3,4]
x=[_/17 for _ in x]
pp(x)

关于python - 实现自定义 pretty-print 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3258072/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com