2013-12-11 172 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...'