【问题标题】:python3: pretty-print alternatives to "pprint.pformat" and "json.dumps"python3:“pprint.pformat”和“json.dumps”的漂亮打印替代品
【发布时间】:2018-04-30 11:41:59
【问题描述】:

我想以一种与 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 尝试不同的参数组合,但我还没有弄清楚如何获得这种长线行为。

我确信我可以自己编写类似的东西,但是,我希望有一个或多个现有的模块可供我使用,以便以这种方式进行漂亮的打印。

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

非常感谢。

【问题讨论】:

    标签: python-3.x pretty-print


    【解决方案1】:

    我发现我可以使用 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'
        ]
    }
    

    有一些方法可以控制缩进和其他代码格式化策略。

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

    【讨论】:

    • 如果 dict-values 是具有 < type 'name' > 表示的对象,这似乎不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2013-02-07
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多