2013-12-11 146 views
6

倾倒时自动缩短长字符串我有以下的测试程序:漂亮的打印

​​

目前的输出是一样的东西:

{ '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编码的附件),我不想填满我的日志。我想是这样的:

{ '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的字典字符串值必须用省略号来代替。​​中是否有内置支持,或者我是否必须通过手动步行并自己缩短字符串来创建字典副本?

回答

8

你也可以继承的PrettyPrinter和覆盖的方法_format

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) 

此打印:

[0, 1, 2] 
'xxxxxxxxxxxxxxxxxxxx...'