如何将 pprint 输出作为字符串而不打印在标准输出上?

How to get the pprint output as string and not printed on stdout?

在 python 3.6.8 中,我希望 pprint 的输出不打印到屏幕上(例如 stdout),但我希望该输出为字符串在一个变量中。

我尝试了以下(完整示例):

import io
import pprint

d = {'cell_type': 'code',
   'execution_count': None,
   'metadata': {'collapsed': True, 'trusted': True},
   'outputs': []
}
f = io.StringIO()
pprint.pprint(dict, f)
print(f.read())

但我得到的是一个空字符串。我期待一个输出

{'cell_type': 'code',
 'execution_count': None,
 'metadata': {'collapsed': True, 'trusted': True},
 'outputs': []}

相反。

也许有更简单的方法可以在没有流的情况下实现这一点?

最后我想比较两个非常复杂的词典,看看它们的区别。我的想法:生成 dict 的字符串版本并比较它(与 bash diff 之类的东西)。

您在读取之前没有移动文件指针。

f = io.StringIO()
pprint.pprint(d, f) # note: pass d and not dict
f.seek(0) # move pointer to start of file
print(f.read())

或者只是

print(f.getvalue())