首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用漂亮打印转储时自动缩短长字符串

使用漂亮打印转储时自动缩短长字符串
EN

Stack Overflow用户
提问于 2013-12-11 08:50:25
回答 1查看 1.2K关注 0票数 10

我有以下测试程序:

代码语言:javascript
复制
    from random import choice
    d = { }
    def data(length):
        alphabet = 'abcdefghijklmnopqrstuvwxyz'
        res = ''
        for _ in xrange(length):
            res += choice(alphabet)
        return res
    # Create the test data
    for cnt in xrange(10):
        key = 'key-%d' % (cnt)
        d[key] = data(30)
    def pprint_shorted(d, max_length):
        import pprint
        pp = pprint.PrettyPrinter(indent=4)
        pp.pprint(d)
    pprint_shorted(d, 10)

当前的输出类似于:

代码语言:javascript
复制
{   'key-0': 'brnneqgetvanmggyayppxevwcnxvue',
    'key-1': 'qjzrklrdkykililenwcyhaexuylgub',
    'key-2': 'ayddiaxhvgxpszutnjdwlgojqaluhr',
    'key-3': 'rmjpzxrmbogezorigkycqhpsctinzq',
    'key-4': 'botfczymszkzwuiecyarknnrvwavnr',
    'key-5': 'norifblhtvfnwblcyeipjmteznylfy',
    'key-6': 'tiiubgdwxnogdmbafvnujbwpfdopjl',
    'key-7': 'badgwbrrqunivylutbxqkaeuctrykt',
    'key-8': 'wulrfkqfqqecxmscayzdbatyispwtu',
    'key-9': 'gzlwfvjrevlyvbmrvuisnyhhbbwtdd'}

在我的生产数据中,有时字符串非常长(例如,几千个字符,来自base64编码的附件),我不希望这样填充日志。我想要的是:

代码语言:javascript
复制
{   'key-0': 'brnneqgetv...',
    'key-1': 'qjzrklrdky...',
    'key-2': 'ayddiaxhvg...',
    'key-3': 'rmjpzxrmbo...',
    'key-4': 'botfczymsz...',
    'key-5': 'norifblhtv...',
    'key-6': 'tiiubgdwxn...',
    'key-7': 'badgwbrrqu...',
    'key-8': 'wulrfkqfqq...',
    'key-9': 'gzlwfvjrev...'}

也就是说,长度> max_length的dict中的字符串值必须替换为省略号。在pretty print中是否对此有任何内建支持,或者我必须通过手动遍历它并缩短字符串来创建dict的副本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-11 09:07:23

您可以将PrettyPrinter子类化并重写_format方法。

代码语言:javascript
复制
import pprint

class P(pprint.PrettyPrinter):
  def _format(self, object, *args, **kwargs):
    if isinstance(object, basestring):
      if len(object) > 20:
        object = object[:20] + '...'
    return pprint.PrettyPrinter._format(self, object, *args, **kwargs)

P().pprint(range(3))
P().pprint('x' * 1000)

这些指纹:

代码语言:javascript
复制
[0, 1, 2]
'xxxxxxxxxxxxxxxxxxxx...'
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20514525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档