是否有一个python模块提供比pprint更深入的数据结构分析?

时间:2010-07-11 22:44:26

标签: python

python中有什么东西可以让我以一种看到它的基础数据表示的方式转出一个随机对象吗?

我来自Perl,Data :: Dumper合理地让我看到数据结构的布局。在python中有什么相同的东西吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

Perl中的Dumper为您提供了一个对象的表示,该对象可以由解释器eval来为您提供原始对象。 Python中的对象repr试图这样做,有时它是可能的。 dict的{​​{1}}或repr的{​​{1}}执行此操作,而strrepr等类也会执行此操作。所以datetimetimedelta相当,但它并不漂亮,也没有向您显示对象的内部结构。为此,您可以使用repr并滚动自己的打印机。

这是我在打印机上的镜头,它不会产生Dumper能力的Python代码,因此应该用来生成对象的字符串:

dir

在上面的例子中,我重写了对象的默认eval实现。当您尝试将对象表示为字符串或使用字符串格式化函数对其进行格式化时,会调用def dump(obj): out = {} for attr in dir(obj): out[attr] = getattr(obj, attr) from pprint import pformat return pformat(out) class myclass(object): foo = 'foo' def __init__(self): self.bar = 'bar' def __str__(self): return dump(self) c = myclass() print c

BTW __str__是执行__str__时打印的内容,它会调用该对象上的repr方法。有关如何控制对象格式的详细信息,请参阅the Python documentation of __repr__

print obj

上述代码的输出是

__repr__

答案 1 :(得分:0)

在经过大量搜索之后,我偶然发现了这个我通常导入的Dumper等效物。 https://salmon-protocol.googlecode.com/svn-history/r24/trunk/salmon-playground/dumper.py