是否有用于python数据的漂亮打印机?

时间:2020-03-06 14:20:53  来源:igfitidea点击:

以交互方式使用python,有时需要显示结果,该结果是一些任意复杂的数据结构(例如带有嵌入式列表的列表等)
默认的显示方式是一个巨大的线性转储,它会一遍又一遍地包裹起来,我们必须仔细解析才能读取它。

是否有什么东西可以容纳任何python对象并以更合理的方式显示它。例如

[0, 1,
    [a, b, c],
    2, 3, 4]

代替:

[0, 1, [a, b, c], 2, 3, 4]

我知道这不是一个很好的例子,但我认为我们明白了。

解决方案

from pprint import pprint
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4]
pprint(a)

请注意,对于像我的示例这样的简短列表,pprint实际上将全部打印在一行上。但是,对于更复杂的结构,它可以很好地打印漂亮的数据。

另一个不错的选择是使用IPython,它是一个具有许多额外功能的交互式环境,包括自动漂亮的打印,方法的制表符完成,易于访问的shell等。它也很容易安装。

IPython教程

Somtimes YAML可以做到这一点。

import yaml
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4]
print yaml.dump(a)

产生:

- 0
- 1
- [a, b, c]
- 2
- 3
- 4

除了pprint.pprint之外,pprint.pformat对使可读的__repr__确实有用。我复杂的__repr__通常看起来像这样:

def __repr__(self):
    from pprint import pformat

    return "<ClassName %s>" % pformat({"attrs":self.attrs,
                                       "that_i":self.that_i,
                                       "care_about":self.care_about})