पायथन डेटा पर्सिस्टेंस - मार्शल मॉड्यूल

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

मार्शल मॉड्यूल द्वारा उपयोग किया जाने वाला डेटा प्रारूप पायथन संस्करणों में संगत नहीं है। इसलिए, एक संस्करण का एक संकलित पायथन स्क्रिप्ट (.pyc फ़ाइल) संभवतः दूसरे पर निष्पादित नहीं होगी।

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

डंप ()

यह फ़ंक्शन समर्थित पायथन ऑब्जेक्ट को किसी फ़ाइल में बाइट प्रतिनिधित्व लिखता है। फ़ाइल स्वयं एक बाइनरी फ़ाइल होती है जिसमें लिखित अनुमति होती है

भार()

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

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

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

compile(source, file, mode)

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

मोड पैरामीटर 'निष्पादन' है यदि स्रोत में कथनों का अनुक्रम है, तो 'निष्कासित' यदि एक एकल अभिव्यक्ति है या 'एकल' है यदि इसमें एक एकल संवादात्मक कथन है।

संकलन कोड ऑब्जेक्ट तब डंप () फ़ंक्शन का उपयोग करके एक .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()

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

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