【发布时间】:2010-07-15 17:08:19
【问题描述】:
自定义pprint.PrettyPrinter
pprint 模块的文档提到 PrettyPrinter.format 方法旨在使自定义格式成为可能。
我认为可以在子类中重写此方法,但这似乎没有提供让基类方法应用换行和缩进的方法。
- 我在这里遗漏了什么吗?
- 有没有更好的方法来做到这一点(例如另一个模块)?
替代方案?
我查看了pretty 模块,它看起来很有趣,但似乎没有提供一种方法来自定义其他模块的类格式而不修改这些模块。
我认为我正在寻找的东西可以让我提供类型(或者可能是函数)的映射,这些类型(或者可能是函数)可以识别类型到处理节点的例程。处理节点的例程将获取一个节点并返回它的字符串表示形式,以及一个子节点列表。以此类推。
为什么我要研究漂亮的打印
我的最终目标是紧凑地打印 DocBook 格式 xml.etree.ElementTree 的自定义格式部分。
(我很惊讶没有找到更多 Python 对 DocBook 的支持。也许我在那里遗漏了一些东西。)
我在名为xmlearn 的客户端中构建了一些基本功能,该客户端使用lxml。例如,要转储 Docbook 文件,您可以:
xmlearn -i docbook_file.xml dump -f docbook -r book
这很糟糕,但它为我提供了我正在寻找的信息。
xmlearn 还具有其他功能,例如能够构建图形图像并进行转储以显示 XML 文档中标签之间的关系。这些与这个问题几乎完全无关。
您还可以执行转储到任意深度,或指定 XPath 作为一组起点。 XPath 的东西有点过时了特定于 docbook 的格式,所以这并不是很好的开发。
这仍然不是问题的真正答案。我仍然希望在某个地方有一台易于定制的漂亮打印机。
【问题讨论】:
标签: python xml subclass pretty-print docbook