तो यह बहुत मुद्रण के लिए नहीं थे, reprlib
मॉड्यूल जाने का रास्ता होगा: सुरक्षित, गहरा नीडिंत और पुनरावर्ती के सुरुचिपूर्ण और अनुकूलन हैंडलिंग/स्वयं को संदर्भित डेटा संरचनाओं यह क्या किया गया है है के लिये।
हालांकि, यह reprlib
और pprint
मॉड्यूल के संयोजन को बदलता है, कम से कम मैं सुंदर प्रिंटिंग पहलुओं को तोड़ने के बिना एक साफ तरीके से नहीं आ सकता था।
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)
maxlist=3
साथ आउटपुट::
{'key_1': ['EG8XYD9FVN', 'S2WARDCVAO', 'J00YCU55DP', '...'],
'key_2': ['162LO154PM',
'3ROAV881V2',
[1, 2, ['a', 'b', 'c'], '...'],
'...']}
maxlist=5
साथ आउटपुट (चलाता बंटवारे
बजाय, यहाँ एक समाधान है कि बस PrettyPrinter
उपवर्गों फसल/आवश्यक के रूप में सूचियों को संक्षिप्त करने के लिए अलग लाइनों पर सूचियां):
{'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',
'...']}
नोट्स:
- यह प्रतियां सूचियों का पैदा करेगा। डेटा संरचनाओं के आकार के आधार पर, यह स्मृति उपयोग के मामले में बहुत महंगा हो सकता है।
- यह केवल सूचियों के विशेष मामले से संबंधित है। इस वर्ग के सामान्य उपयोग के लिए समकक्ष व्यवहार को डिक्ट्स, टुपल्स, सेट, फ्रोजनसेट्स ... के लिए लागू किया जाना होगा।
आप [ 'repr' मॉड्यूल] (https पर एक नज़र लेने के लिए चाहते हो सकता है: // डॉक्स। python.org/2/library/repr.html) (पीई 3 में 'reprlib'), विशेष रूप से' maxlist 'सेटिंग: 'rep = repr(); rep.maxlist = 3; प्रिंट rep.repr (obj) 'अब' pprint' के साथ संयोजन करना असली चुनौती है। –
बहुत बढ़िया! यह सबसे अच्छा जवाब है और वास्तव में मुझे क्या चाहिए। क्या आप उत्तर के रूप में जोड़ सकते हैं? @ लुकासग्राफ – CentAu
ऐसा लगता है कि माइकल हॉफ पहले ही एक रिप्रिलिब उत्तर पर काम कर रहा है, इसलिए मैंने इसे अभी ऊपर उठाया :) –