, reprlib
modül gitmek için yol olacaktır: Güvenli, içi içe geçmiş ve özyinelemeli zarif ve özelleştirilebilir işlenmesini/kendinden referanslı veri yapılarını da yapılmış budur için.
Ancak, reprlib
ve pprint
modüllerinin birleştirilmesi önemsiz değil, en azından güzel yazdırma yönlerini kesmeden (bazıları) temiz bir şekilde çıkamadım.(Tetikleyiciler bölme
{'key_1': ['EG8XYD9FVN', 'S2WARDCVAO', 'J00YCU55DP', '...'],
'key_2': ['162LO154PM',
'3ROAV881V2',
[1, 2, ['a', 'b', 'c'], '...'],
'...']}
Çıktı maxlist=5
ile:
from pprint import PrettyPrinter
obj = {
'key_1': [
'EG8XYD9FVN', 'S2WARDCVAO', 'J00YCU55DP', 'R07BUIF2F7', 'VGPS1JD0UM',
'WL3TWSDP8E', 'LD8QY7DMJ3', 'J36U3Z9KOQ', 'KU2FUGYB2U', 'JF3RQ315BY',
],
'key_2': [
'162LO154PM', '3ROAV881V2', 'I4T79LP18J', 'WBD36EM6QL', 'DEIODVQU46',
'KWSJA5WDKQ', 'WX9SVRFO0G', '6UN63WU64G', '3Z89U7XM60', '167CYON6YN',
],
# Test case to make sure we didn't break handling of recursive structures
'key_3': [
'162LO154PM', '3ROAV881V2', [1, 2, ['a', 'b', 'c'], 3, 4, 5, 6, 7],
'KWSJA5WDKQ', 'WX9SVRFO0G', '6UN63WU64G', '3Z89U7XM60', '167CYON6YN',
]
}
class CroppingPrettyPrinter(PrettyPrinter):
def __init__(self, *args, **kwargs):
self.maxlist = kwargs.pop('maxlist', 6)
return PrettyPrinter.__init__(self, *args, **kwargs)
def _format(self, obj, stream, indent, allowance, context, level):
if isinstance(obj, list):
# If object is a list, crop a copy of it according to self.maxlist
# and append an ellipsis
if len(obj) > self.maxlist:
cropped_obj = obj[:self.maxlist] + ['...']
return PrettyPrinter._format(
self, cropped_obj, stream, indent,
allowance, context, level)
# Let the original implementation handle anything else
# Note: No use of super() because PrettyPrinter is an old-style class
return PrettyPrinter._format(
self, obj, stream, indent, allowance, context, level)
p = CroppingPrettyPrinter(maxlist=3)
p.pprint(obj)
Çıktı maxlist=3
ile:
Bunun yerine, sadece buradaki/kırpmak gerekli listelerini kısaltmak için PrettyPrinter
türetilen bir çözüm ayrı satırlarda listeleri):
{'key_1': ['EG8XYD9FVN',
'S2WARDCVAO',
'J00YCU55DP',
'R07BUIF2F7',
'VGPS1JD0UM',
'...'],
'key_2': ['162LO154PM',
'3ROAV881V2',
'I4T79LP18J',
'WBD36EM6QL',
'DEIODVQU46',
'...'],
'key_3': ['162LO154PM',
'3ROAV881V2',
[1, 2, ['a', 'b', 'c'], 3, 4, '...'],
'KWSJA5WDKQ',
'WX9SVRFO0G',
'...']}
Notlar:
- Bu kopya listelerin yaratacaktır. Veri yapılarının büyüklüğüne bağlı olarak, bu bellek kullanımı açısından çok pahalı olabilir.
- listeleri özel vaka ile Bu yalnızca fırsatlar. Dicts, tuples, set, frozensets, ... için bu denklik davranışının uygulanması gerekirdi.
Ayrıca [ 'repr' modül] (https bakmak isteyebilirsiniz: // docs. python.org/2/library/repr.html) ('Py3’de reprlib'), özellikle' maxlist' ayarı: 'rep = Repr(); rep.maxlist = 3; print rep.repr (obj) 'Şimdi bunu“ pprint ”ile birleştirmek gerçek zorluktur. –
Harika! Bu en iyi cevap ve tam olarak ihtiyacım olan şey. Cevap olarak ekleyebilir misiniz? @LukasGraf – CentAu
Michael Hoff zaten reprlib cevap üzerinde çalışıyor, bu yüzden sadece kısaltmak değil Yani –