我喜欢Python中的pprint模块.我经常使用它进行测试和调试.我经常使用width选项来确保输出在我的终端窗口中很好地适应.
它一直运行良好,直到他们在Python 2.7中添加了新的有序字典类型(我非常喜欢的另一个很酷的功能).如果我试着漂亮地打印一个有序的字典,它就不能很好地显示出来.而不是将每个键值对放在它自己的行上,整个事物显示在一条长行上,它包含很多次并且难以阅读.
这里有没有人有办法让它打印得很好,就像旧的无序词典一样?如果我花了足够的时间,我可能会想出一些东西,可能使用PrettyPrinter.format方法,但我想知道这里是否有人知道解决方案.
更新:我为此提交了一份错误报告.您可以在http://bugs.python.org/issue10592上看到它.
Python有一个漂亮的打印机(pprint(...)).我想让我的课程相当可打印.如果我提供某个界面,那么漂亮的打印会以更好的方式打印我的实例吗?
第8.11节中的Python文档显示了不同的示例,但没有示例如何使用户定义的类具有可打印性.
那么我的课程需要提供哪种界面?
还有其他(可能更好)的格式化程序吗?
使用案例:
我想打印ConfigParser的内容,为此我创建了一个名为ExtendenConfigParser的扩展版本.所以我可以添加更多功能或添加匹配的漂亮打印界面.
为自定义python3类添加漂亮打印支持的最可靠方法是什么?
对于交互式数据评估,我发现漂亮的打印支持非常重要.但是,默认情况下,iPython的漂亮打印机IPython.lib.pretty.pprint和标准库pprint.pprint都只支持内置结构类型(列表,元组,字典),并将plain repr()用于其他所有内容.值得注意的是,这甚至包括其他非常有用的实用程序collections.namedtuple().
结果,漂亮的打印输出通常是奇怪的格式.
我当前的awkard解决方法是定义类
class MyPrettyClass(dict):
def __init__(self, ...):
self.__dict__ = self
self._class = self.__class__ # In order to recognize the type.
...
<A LOT OF FIELDS>
...
Run Code Online (Sandbox Code Playgroud)
在一个真实世界的例子中,这导致了
{'__lp_mockup_xml': <lxml.etree._ElementTree object at 0x0000021C5EB53DC8>,
'__lp_mockup_xml_file': 'E:\\DataDirectory\\mockup.xml',
'__lp_realrun_xml_file': 'E:\\DataDirectory\\realrun.xml',
'_class': <class '__main__.readall'>,
'_docopy': False,
'dirname': 'E:\\DataDirectory'}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来获得漂亮的打印支持?
弱相关:我的问题在python3中低级内省?最初旨在建立我自己的类不可知的漂亮打印机,但没有产生任何结果.