Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

आंतरिक पायथन ऑब्जेक्ट सीरियलाइज़ेशन (marshal मॉड्यूल)

भले ही पायथन की स्टैंडर्ड लाइब्रेरी में marshal मॉड्यूल ऑब्जेक्ट सीरियलाइज़ेशन सुविधाएँ प्रदान करता है (pickle मॉड्यूल के समान), यह सामान्य उद्देश्य डेटा पर्सिस्टेंस या सॉकेट्स आदि के माध्यम से पायथन ऑब्जेक्ट्स के ट्रांसमिशन के लिए वास्तव में उपयोगी नहीं है। यह मॉड्यूल ज्यादातर पायथन द्वारा स्वयं पायथन मॉड्यूल्स के कंपाइल्ड संस्करण (.pyc फ़ाइलें) पर रीड/राइट ऑपरेशन्स का समर्थन करने के लिए उपयोग किया जाता है। marshal मॉड्यूल द्वारा उपयोग किया जाने वाला डेटा फॉर्मेट पायथन संस्करणों के बीच कम्पैटिबल नहीं है (सबवर्ज़न तक नहीं)। इसलिए एक संस्करण का कंपाइल्ड पायथन स्क्रिप्ट (.pyc फ़ाइल) सबसे अधिक संभावना दूसरे पर नहीं चलेगी। marshal मॉड्यूल इस प्रकार पायथन की आंतरिक ऑब्जेक्ट सीरियलाइज़ेशन के लिए उपयोग किया जाता है।

pickle मॉड्यूल की तरह, marshal मॉड्यूल भी फ़ाइल से/में मार्शल्ड ऑब्जेक्ट्स को पढ़ने/लिखने के लिए load() और dump() फ़ंक्शन्स को परिभाषित करता है। साथ ही, loads() और dumps() फ़ंक्शन मार्शल्ड ऑब्जेक्ट के स्ट्रिंग रिप्रेजेंटेशन से निपटते हैं।

dumps() - पायथन ऑब्जेक्ट को मार्शल करके बाइट-जैसा ऑब्जेक्ट लौटाता है। मार्शलिंग के लिए केवल स्टैंडर्ड डेटा टाइप्स के ऑब्जेक्ट्स समर्थित हैं। असमर्थित टाइप्स ValueError अपवाद उठाते हैं।

loads() - यह फ़ंक्शन बाइट-जैसे ऑब्जेक्ट को संबंधित पायथन ऑब्जेक्ट में बदलता है। यदि रूपांतरण वैध पायथन ऑब्जेक्ट में परिणाम नहीं देता है, तो ValueError या TypeError उठाया जा सकता है।

निम्न कोड दिखाता है कि डिक्शनरी ऑब्जेक्ट को dumps() का उपयोग करके कैसे मार्शल किया जाता है। बाइट रिप्रेजेंटेशन को loads() फ़ंक्शन द्वारा वापस डिक्शनरी में बदला जाता है।

import marshal

person = {"name": "xyz", "age": 22, "marks": [45, 56, 78]}
data = marshal.dumps(person)
obj = marshal.loads(data)
print(obj)

dump() - यह फ़ंक्शन समर्थित पायथन ऑब्जेक्ट के बाइट रिप्रेजेंटेशन को फ़ाइल में लिखता है। फ़ाइल स्वयं राइट परमिशन के साथ बाइनरी फ़ाइल होनी चाहिए।

load() - यह फ़ंक्शन बाइनरी फ़ाइल से बाइट डेटा पढ़ता है और इसे पायथन ऑब्जेक्ट में बदलता है।

जैसा कि ऊपर उल्लेख किया गया है, marshal मॉड्यूल .pyc फ़ाइलों को प्रोसेस करने के लिए उपयोग किया जाता है। निम्न उदाहरण कोड ऑब्जेक्ट्स को हैंडल करने के लिए dump() और load() फ़ंक्शन्स के उपयोग को प्रदर्शित करता है, जिनका उपयोग प्रीकंपाइल्ड पायथन मॉड्यूल्स को स्टोर करने के लिए किया जाता है।

कोड बिल्ट-इन compile() फ़ंक्शन का उपयोग करता है ताकि एक सोर्स स्ट्रिंग से कोड ऑब्जेक्ट बनाया जा सके जिसमें पायथन इंस्ट्रक्शन्स एम्बेडेड हों।

compile(source, file, mode)

file पैरामीटर वह फ़ाइल होनी चाहिए जिससे कोड पढ़ा गया था। यदि इसे फ़ाइल से नहीं पढ़ा गया था तो कोई भी मनमाना स्ट्रिंग पास करें।

mode पैरामीटर 'exec' है यदि सोर्स में स्टेटमेंट्स का अनुक्रम है, 'eval' यदि सिंगल एक्सप्रेशन है या 'single' यदि इसमें सिंगल इंटरैक्टिव स्टेटमेंट है।

कंपाइल्ड कोड ऑब्जेक्ट को फिर dump() फ़ंक्शन का उपयोग करके .pyc फ़ाइल में स्टोर किया जाता है:

import marshal

script = """
a = 10
b = 20
print('addition = ', a+b)
"""

code = compile(script, "script", "exec")
f = open("a.pyc", "wb")
marshal.dump(code, f)
f.close()

.pyc फ़ाइल से ऑब्जेक्ट को डिसीरियलाइज़ करने के लिए load() फ़ंक्शन का उपयोग करें। चूंकि यह कोड ऑब्जेक्ट लौटाता है, इसे exec(), एक अन्य बिल्ट-इन फ़ंक्शन का उपयोग करके चलाया जा सकता है।

import marshal
f = open("a.pyc", "rb")
data = marshal.load(f)
exec(data)

आउटपुट सोर्स स्ट्रिंग में एम्बेडेड कोड ब्लॉक का परिणाम होगा:

addition = 30
  1. पायथन ऑब्जेक्ट तुलना:  is  बनाम  == पायथन ऑब्जेक्ट तुलना: "is" बनाम "=="

    इस लेख में हम ऑब्जेक्ट तुलना यानी is ऑपरेटर और समानता ऑपरेटर == के बीच अंतर के बारे में जानेंगे। समानता ऑपरेटर पास किए गए आर्गुमेंट के मान पर काम करता है जबकि is ऑपरेटर पास किए गए दो ऑब्जेक्ट्स के रेफरेंस की तुलना करता है। समानता ऑपरेटर के मामले में आर्गुमेंट की सामग्री की तुलना की जाती है, उनके रेफ

  1. पायथन का आंतरिक कार्यान्वयन पायथन का आंतरिक कार्यान्वयन

    इस लेख में, हम पायथन के आंतरिक कार्यान्वयन और पायथन इंटरप्रेटर द्वारा विभिन्न ऑब्जेक्ट्स को मेमोरी में स्पेस आवंटित करने के तरीके के बारे में जानेंगे।पायथन जावा की तरह एक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग कंस्ट्रक्ट लैंग्वेज है। पायथन एक इंटरप्रेटर का उपयोग करता है और इसलिए इसे इंटरप्रेटेड लैंग्वेज कहा

  1. पायथन में लिस्ट (List) का आंतरिक कार्यान्वयन पायथन में लिस्ट (List) का आंतरिक कार्यान्वयन

    इस ट्यूटोरियल में, हम पायथन 3.x या उससे पहले के संस्करण में लिस्ट (List) के आंतरिक कार्यान्वयन के बारे में जानेंगे। हम यह भी देखेंगे कि जब हम प्रत्येक चरण में एक पायथन स्टेटमेंट लिखते हैं तो ऑब्जेक्ट और फ्रेम कैसे बनते हैं।लिस्ट इनिशियलाइज़ करना: इसका मतलब है कि हम कुछ तत्वों के साथ एक लिस्ट बना रहे