python3:"pprint.pformat" 和 "json.dumps" 的漂亮印刷替代品

python3: pretty-print alternatives to "pprint.pformat" and "json.dumps"

我想以一种不同于 json.dumpspprint.pformat 格式化的方式漂亮地打印 python 对象。我想知道是否有人知道我可以使用以下任何现有模块来漂亮地打印我的代码:

假设我有以下 python 字典:

mydict = { 'a': 'letter a',
           'b': [ 'b', 'b', 'b', 'b' ],
           'c': [ 'c' ],
           'd': [ 'dddd', 'dddd', 'dddd', 'dddd', 'dddd',
                  'dddd', 'dddd', 'dddd', 'dddd', 'dddd',
                  'dddd' ]
         }

我希望 mydict 以与我上面所写的大致相同的方式印刷得漂亮, ...

{ 'a': 'letter a',
  'b': [ 'b', 'b', 'b', 'b' ],
  'c': [ 'c' ],
  'd': [ 'dddd', 'dddd', 'dddd', 'dddd', 'dddd',
         'dddd', 'dddd', 'dddd', 'dddd', 'dddd',
         'dddd' ]
}

换句话说,对于列表和其他类似的项目,我希望每个项目都在页面上列出,直到达到某个最大指定宽度,然后将其换行到剩下的新行上-与上一行中的数据对齐。

我一直在为 json.dumpspprint.pformat 尝试不同的参数组合,但我还没有想出如何获得这种长线行为。

我确定我自己可以写出这样的东西,但相反,我希望有一个或多个现有模块可以使用,以便以这种方式进行漂亮打印。

有谁知道野外已经能够以这种方式进行漂亮打印的东西吗?

非常感谢。

我发现我可以使用 yapf 包附带的代码格式来做到这一点:https://github.com/google/yapf

考虑到上面的 mydict 项,我可以这样做...

import yapf
style = { 'COLUMN_LIMIT': 50, 'ALLOW_SPLIT_BEFORE_DICT_VALUE': False }
text, flag = yapf.yapflib.yapf_api.FormatCode(str(mydict),
                                              style_config=style)
print(text)

...我得到以下输出...

{
    'a': 'letter a',
    'b': ['b', 'b', 'b', 'b'],
    'c': ['c'],
    'd': [
        'dddd', 'dddd', 'dddd', 'dddd', 'dddd',
        'dddd', 'dddd', 'dddd', 'dddd', 'dddd',
        'dddd'
    ]
}

有多种方法可以控制缩进和其他代码格式设置策略。

将其封装到我自己的漂亮打印函数中会很容易。