Python 3.7

pprint - डेटा सुंदर प्रिंटर




python

pprint - डेटा सुंदर प्रिंटर

स्रोत कोड: Lib/pprint.py

pprint मॉड्यूल एक ऐसे रूप में पायथन डेटा संरचनाओं को "सुंदर-प्रिंट" करने की क्षमता प्रदान करता है जिसका उपयोग दुभाषिया के इनपुट के रूप में किया जा सकता है। यदि स्वरूपित संरचनाओं में ऐसी वस्तुएँ शामिल हैं, जो मूलभूत पायथन प्रकार नहीं हैं, तो प्रतिनिधित्व लोड नहीं हो सकता है। यह मामला हो सकता है अगर फाइलें, सॉकेट या कक्षाएं जैसी वस्तुओं के साथ-साथ कई अन्य वस्तुएं भी शामिल हैं, जो कि पायथन शाब्दिक के रूप में प्रतिनिधित्व करने योग्य नहीं हैं।

स्वरूपित प्रतिनिधित्व ऑब्जेक्ट्स को एक ही लाइन पर रखता है यदि वह कर सकता है, और उन्हें कई लाइनों पर तोड़ता है यदि वे अनुमत चौड़ाई के भीतर फिट नहीं होते हैं। अगर आपको चौड़ाई की बाधा को समायोजित करने की आवश्यकता है, तो स्पष्ट रूप से PrettyPrinter वस्तुओं का निर्माण करें।

डिसप्ले की गणना होने से पहले शब्दकोशों को कुंजी द्वारा क्रमबद्ध किया जाता है।

pprint मॉड्यूल एक वर्ग को परिभाषित करता है:

class pprint.PrettyPrinter(indent=1, width=80, depth=None, stream=None, *, compact=False)

एक बहुत PrettyPrinter उदाहरण का निर्माण। यह कंस्ट्रक्टर कई कीवर्ड मापदंडों को समझता है। एक आउटपुट स्ट्रीम स्ट्रीम कीवर्ड का उपयोग करके सेट की जा सकती है; स्ट्रीम ऑब्जेक्ट पर उपयोग की जाने वाली एकमात्र विधि फ़ाइल प्रोटोकॉल का write() विधि है। यदि निर्दिष्ट नहीं किया गया है, तो PrettyPrinter को sys.stdout । प्रत्येक पुनरावर्ती स्तर के लिए जोड़ा गया इंडेंटेशन की मात्रा इंडेंट द्वारा निर्दिष्ट की जाती है; डिफ़ॉल्ट एक है। अन्य मान आउटपुट को थोड़ा अजीब लग सकते हैं, लेकिन घोंसले के शिकार को आसान बना सकते हैं। स्तरों की संख्या जो मुद्रित हो सकती है, गहराई से नियंत्रित होती है ; यदि मुद्रित किया जा रहा डेटा संरचना बहुत गहरा है, तो अगला निहित स्तर इसके द्वारा प्रतिस्थापित किया जाता है ... डिफ़ॉल्ट रूप से, स्वरूपित की जा रही वस्तुओं की गहराई पर कोई बाधा नहीं है। वांछित आउटपुट चौड़ाई चौड़ाई पैरामीटर का उपयोग करके विवश है; डिफ़ॉल्ट 80 वर्ण है। यदि एक संरचना को संकुचित चौड़ाई के भीतर स्वरूपित नहीं किया जा सकता है, तो एक सर्वोत्तम प्रयास किया जाएगा। यदि कॉम्पैक्ट झूठी है (डिफ़ॉल्ट) एक लंबे अनुक्रम के प्रत्येक आइटम को एक अलग लाइन पर स्वरूपित किया जाएगा। यदि कॉम्पैक्ट सही है, तो चौड़ाई के भीतर जितने आइटम फिट होंगे, उन्हें प्रत्येक आउटपुट लाइन पर स्वरूपित किया जाएगा।

संस्करण 3.4 में बदला गया : कॉम्पैक्ट पैरामीटर जोड़ा गया।

>>> import pprint
>>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
>>> stuff.insert(0, stuff[:])
>>> pp = pprint.PrettyPrinter(indent=4)
>>> pp.pprint(stuff)
[   ['spam', 'eggs', 'lumberjack', 'knights', 'ni'],
    'spam',
    'eggs',
    'lumberjack',
    'knights',
    'ni']
>>> pp = pprint.PrettyPrinter(width=41, compact=True)
>>> pp.pprint(stuff)
[['spam', 'eggs', 'lumberjack',
  'knights', 'ni'],
 'spam', 'eggs', 'lumberjack', 'knights',
 'ni']
>>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',
... ('parrot', ('fresh fruit',))))))))
>>> pp = pprint.PrettyPrinter(depth=6)
>>> pp.pprint(tup)
('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', (...)))))))

pprint मॉड्यूल कई शॉर्टकट फ़ंक्शन भी प्रदान करता है:

pprint.pformat(object, indent=1, width=80, depth=None, *, compact=False)

एक स्ट्रिंग के रूप में ऑब्जेक्ट के स्वरूपित प्रतिनिधित्व को लौटाएं। इंडेंट , चौड़ाई , गहराई और कॉम्पैक्ट को फॉर्मेटिंग पैरामीटर्स के रूप में PrettyPrinter कंस्ट्रक्टर को पास किया जाएगा।

संस्करण 3.4 में बदला गया : कॉम्पैक्ट पैरामीटर जोड़ा गया।

pprint.pprint(object, stream=None, indent=1, width=80, depth=None, *, compact=False)

स्ट्रीम पर ऑब्जेक्ट के स्वरूपित प्रतिनिधित्व को प्रिंट करता है, उसके बाद एक नई रेखा। यदि स्ट्रीम None , तो sys.stdout का उपयोग किया जाता है। इसका उपयोग मानों के निरीक्षण के लिए print() फ़ंक्शन के बजाय इंटरएक्टिव इंटरप्रेटर में किया जा सकता है (आप एक दायरे में उपयोग के लिए print = pprint.pprint भी पुन: असाइन कर सकते हैं)। इंडेंट , चौड़ाई , गहराई और कॉम्पैक्ट को फॉर्मेटिंग पैरामीटर्स के रूप में PrettyPrinter कंस्ट्रक्टर को पास किया जाएगा।

संस्करण 3.4 में बदला गया : कॉम्पैक्ट पैरामीटर जोड़ा गया।

>>> import pprint
>>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
>>> stuff.insert(0, stuff)
>>> pprint.pprint(stuff)
[<Recursion on list with id=...>,
 'spam',
 'eggs',
 'lumberjack',
 'knights',
 'ni']
pprint.isreadable(object)

निर्धारित करें कि क्या ऑब्जेक्ट का स्वरूपित प्रतिनिधित्व "पठनीय" है, या इसका उपयोग eval() का उपयोग करके मूल्य को फिर से संगठित करने के लिए किया जा सकता है। यह हमेशा पुनरावर्ती वस्तुओं के लिए False लौटाता है।

>>> pprint.isreadable(stuff)
False
pprint.isrecursive(object)

निर्धारित करें कि क्या ऑब्जेक्ट को पुनरावर्ती प्रतिनिधित्व की आवश्यकता है।

एक और समर्थन समारोह भी परिभाषित किया गया है:

pprint.saferepr(object)

पुनरावर्ती डेटा संरचनाओं के खिलाफ संरक्षित वस्तु का एक स्ट्रिंग प्रतिनिधित्व लौटें। यदि ऑब्जेक्ट का प्रतिनिधित्व एक पुनरावर्ती प्रविष्टि को उजागर करता है, तो पुनरावर्ती संदर्भ को <Recursion on typename with id=number> रूप में दर्शाया जाएगा। प्रतिनिधित्व अन्यथा स्वरूपित नहीं है।

>>> pprint.saferepr(stuff)
"[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']"

सुंदर वस्तुओं

PrettyPrinter उदाहरण निम्नलिखित तरीके हैं:

PrettyPrinter.pformat(object)

ऑब्जेक्ट के स्वरूपित प्रतिनिधित्व को लौटाएं। यह PrettyPrinter कंस्ट्रक्टर को PrettyPrinter गए विकल्पों को ध्यान में PrettyPrinter

PrettyPrinter.pprint(object)

कॉन्फ़िगर स्ट्रीम पर ऑब्जेक्ट के स्वरूपित प्रतिनिधित्व को प्रिंट करें, उसके बाद एक नई पंक्ति।

निम्नलिखित विधियाँ समान नामों के संगत कार्यों के लिए कार्यान्वयन प्रदान करती हैं। उदाहरण के तौर पर इन विधियों का उपयोग करना थोड़ा अधिक कुशल है क्योंकि नए PrettyPrinter ऑब्जेक्ट्स को बनाने की आवश्यकता नहीं है।

PrettyPrinter.isreadable(object)

निर्धारित करें कि क्या ऑब्जेक्ट का स्वरूपित प्रतिनिधित्व "पठनीय" है, या इसका उपयोग eval() का उपयोग करके मूल्य को फिर से संगठित करने के लिए किया जा सकता है। ध्यान दें कि यह पुनरावर्ती वस्तुओं के लिए False रिटर्न देता है। अगर PrettyPrinter की गहराई पैरामीटर सेट है और ऑब्जेक्ट अनुमति से अधिक गहरा है, तो यह False रिटर्न देता है।

PrettyPrinter.isrecursive(object)

निर्धारित करें कि क्या वस्तु को पुनरावर्ती प्रतिनिधित्व की आवश्यकता है।

इस विधि को हुक के रूप में उपवर्गों को संशोधित करने की अनुमति देने के लिए प्रदान किया जाता है जिस तरह से वस्तुओं को तार में परिवर्तित किया जाता है। डिफ़ॉल्ट कार्यान्वयन saferepr() कार्यान्वयन के आंतरिक का उपयोग करता है।

PrettyPrinter.format(object, context, maxlevels, level)

तीन मान लौटाता है: एक स्ट्रिंग के रूप में ऑब्जेक्ट का स्वरूपित संस्करण, एक ध्वज इंगित करता है कि क्या परिणाम पठनीय है, और एक ध्वज जो इंगित करता है कि क्या पुनरावृत्ति का पता चला था। पहला तर्क प्रस्तुत किया जाने वाला वस्तु है। दूसरा एक डिक्शनरी है जिसमें वस्तुओं की id() है जो वर्तमान प्रस्तुति संदर्भ का हिस्सा है ( ऑब्जेक्ट के लिए प्रत्यक्ष और अप्रत्यक्ष कंटेनर जो प्रस्तुति को प्रभावित कर रहे हैं) कुंजी के रूप में; यदि किसी वस्तु को प्रस्तुत किया जाना चाहिए, जो पहले से ही संदर्भ में दर्शाया गया है , तो तीसरा रिटर्न वैल्यू True होना चाहिए। format() विधि के लिए पुनरावर्ती कॉल इस शब्दकोश में कंटेनरों के लिए अतिरिक्त प्रविष्टियों को जोड़ना चाहिए। तीसरा तर्क, मैक्सवेल , पुनरावृत्ति के लिए अनुरोधित सीमा देता है; यह 0 होगा यदि कोई अनुरोधित सीमा नहीं है। इस तर्क को पुनरावर्ती कॉलों के लिए असमान रूप से पारित किया जाना चाहिए। चौथा तर्क, स्तर , वर्तमान स्तर देता है; पुनरावर्ती कॉल को वर्तमान कॉल की तुलना में कम मूल्य पर पास किया जाना चाहिए।

उदाहरण

pprint फ़ंक्शन और इसके मापदंडों के कई उपयोगों को प्रदर्शित करने के लिए, आइए PyPI से एक प्रोजेक्ट के बारे में जानकारी प्राप्त करें:

>>> import json
>>> import pprint
>>> from urllib.request import urlopen
>>> with urlopen('http://pypi.org/project/Twisted/json') as url:
...     http_info = url.info()
...     raw_data = url.read().decode(http_info.get_content_charset())
>>> project_info = json.loads(raw_data)

अपने मूल रूप में, pprint संपूर्ण ऑब्जेक्ट दिखाता है:

>>> pprint.pprint(project_info)
{'info': {'_pypi_hidden': False,
          '_pypi_ordering': 125,
          'author': 'Glyph Lefkowitz',
          'author_email': '[email protected]',
          'bugtrack_url': '',
          'cheesecake_code_kwalitee_id': None,
          'cheesecake_documentation_id': None,
          'cheesecake_installability_id': None,
          'classifiers': ['Programming Language :: Python :: 2.6',
                          'Programming Language :: Python :: 2.7',
                          'Programming Language :: Python :: 2 :: Only'],
          'description': 'An extensible framework for Python programming, with '
                         'special focus\r\n'
                         'on event-based network programming and multiprotocol '
                         'integration.',
          'docs_url': '',
          'download_url': 'UNKNOWN',
          'home_page': 'http://twistedmatrix.com/',
          'keywords': '',
          'license': 'MIT',
          'maintainer': '',
          'maintainer_email': '',
          'name': 'Twisted',
          'package_url': 'http://pypi.org/project/Twisted',
          'platform': 'UNKNOWN',
          'release_url': 'http://pypi.org/project/Twisted/12.3.0',
          'requires_python': None,
          'stable_version': None,
          'summary': 'An asynchronous networking framework written in Python',
          'version': '12.3.0'},
 'urls': [{'comment_text': '',
           'downloads': 71844,
           'filename': 'Twisted-12.3.0.tar.bz2',
           'has_sig': False,
           'md5_digest': '6e289825f3bf5591cfd670874cc0862d',
           'packagetype': 'sdist',
           'python_version': 'source',
           'size': 2615733,
           'upload_time': '2012-12-26T12:47:03',
           'url': 'https://pypi.org/packages/source/T/Twisted/Twisted-12.3.0.tar.bz2'},
          {'comment_text': '',
           'downloads': 5224,
           'filename': 'Twisted-12.3.0.win32-py2.7.msi',
           'has_sig': False,
           'md5_digest': '6b778f5201b622a5519a2aca1a2fe512',
           'packagetype': 'bdist_msi',
           'python_version': '2.7',
           'size': 2916352,
           'upload_time': '2012-12-26T12:48:15',
           'url': 'https://pypi.org/packages/2.7/T/Twisted/Twisted-12.3.0.win32-py2.7.msi'}]}

परिणाम एक निश्चित गहराई तक सीमित हो सकता है (गहरी सामग्री के लिए इलिप्सिस का उपयोग किया जाता है):

>>> pprint.pprint(project_info, depth=2)
{'info': {'_pypi_hidden': False,
          '_pypi_ordering': 125,
          'author': 'Glyph Lefkowitz',
          'author_email': '[email protected]',
          'bugtrack_url': '',
          'cheesecake_code_kwalitee_id': None,
          'cheesecake_documentation_id': None,
          'cheesecake_installability_id': None,
          'classifiers': [...],
          'description': 'An extensible framework for Python programming, with '
                         'special focus\r\n'
                         'on event-based network programming and multiprotocol '
                         'integration.',
          'docs_url': '',
          'download_url': 'UNKNOWN',
          'home_page': 'http://twistedmatrix.com/',
          'keywords': '',
          'license': 'MIT',
          'maintainer': '',
          'maintainer_email': '',
          'name': 'Twisted',
          'package_url': 'http://pypi.org/project/Twisted',
          'platform': 'UNKNOWN',
          'release_url': 'http://pypi.org/project/Twisted/12.3.0',
          'requires_python': None,
          'stable_version': None,
          'summary': 'An asynchronous networking framework written in Python',
          'version': '12.3.0'},
 'urls': [{...}, {...}]}

इसके अतिरिक्त, अधिकतम वर्ण चौड़ाई का सुझाव दिया जा सकता है। यदि एक लंबी वस्तु को विभाजित नहीं किया जा सकता है, तो निर्दिष्ट चौड़ाई पार हो जाएगी:

>>> pprint.pprint(project_info, depth=2, width=50)
{'info': {'_pypi_hidden': False,
          '_pypi_ordering': 125,
          'author': 'Glyph Lefkowitz',
          'author_email': '[email protected]',
          'bugtrack_url': '',
          'cheesecake_code_kwalitee_id': None,
          'cheesecake_documentation_id': None,
          'cheesecake_installability_id': None,
          'classifiers': [...],
          'description': 'An extensible '
                         'framework for Python '
                         'programming, with '
                         'special focus\r\n'
                         'on event-based network '
                         'programming and '
                         'multiprotocol '
                         'integration.',
          'docs_url': '',
          'download_url': 'UNKNOWN',
          'home_page': 'http://twistedmatrix.com/',
          'keywords': '',
          'license': 'MIT',
          'maintainer': '',
          'maintainer_email': '',
          'name': 'Twisted',
          'package_url': 'http://pypi.org/project/Twisted',
          'platform': 'UNKNOWN',
          'release_url': 'http://pypi.org/project/Twisted/12.3.0',
          'requires_python': None,
          'stable_version': None,
          'summary': 'An asynchronous networking '
                     'framework written in '
                     'Python',
          'version': '12.3.0'},
 'urls': [{...}, {...}]}