我有以下测试程序:
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)当前的输出类似于:
{ '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的dict中的字符串值必须替换为省略号。在pretty print中是否对此有任何内建支持,或者我必须通过手动遍历它并缩短字符串来创建dict的副本?
发布于 2013-12-11 09:07:23
您可以将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...'https://stackoverflow.com/questions/20514525
复制相似问题