以交互方式使用python,有时需要显示一些任意复杂的数据结构(如带嵌入式列表的列表等) 显示它们的默认方式只是一个大量的线性转储,它只是一遍又一遍地重复你必须仔细解析才能阅读。是否有一个漂亮的打印机的Python数据?
是否有东西会采取任何python对象,并以更合理的方式显示它。例如
[0, 1,
[a, b, c],
2, 3, 4]
代替:
[0, 1, [a, b, c], 2, 3, 4]
我知道这不是一个很好的例子,但我认为你的想法。
以交互方式使用python,有时需要显示一些任意复杂的数据结构(如带嵌入式列表的列表等) 显示它们的默认方式只是一个大量的线性转储,它只是一遍又一遍地重复你必须仔细解析才能阅读。是否有一个漂亮的打印机的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,这是一个具有很多额外功能的交互式环境,包括自动漂亮打印,方法的Tab完成,易于shell访问等等。这也很容易安装。
为了记录,我相信IPython使用pprint来打印东西,所以如果你想在你自己的程序中打印IPython之类的东西,你需要pprint。 – 2009-11-05 01:57:05
那么,也可以将ipython shell导入到你的程序中。我指出ipython是因为除了漂亮打印之外,它还有许多其他有用的功能。 – 2009-11-05 14:27:29
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__
s通常看起来像这样:
def __repr__(self):
from pprint import pformat
return "<ClassName %s>" % pformat({"attrs":self.attrs,
"that_i":self.that_i,
"care_about":self.care_about})
不错!谢谢。 – Ferruccio 2008-09-18 11:48:05