भले ही पायथन के मानक पुस्तकालय में मार्शल मॉड्यूल वस्तु क्रमांकन सुविधाएँ प्रदान करता है (अचार मॉड्यूल के समान), यह सामान्य प्रयोजन डेटा दृढ़ता या सॉकेट आदि के माध्यम से पायथन वस्तुओं के संचरण के लिए वास्तव में उपयोगी नहीं है। इस मॉड्यूल का उपयोग ज्यादातर पायथन द्वारा ही पढ़ने / का समर्थन करने के लिए किया जाता है। पायथन मॉड्यूल (.pyc फ़ाइलें) के संकलित संस्करणों पर संचालन लिखें। मार्शल मॉड्यूल द्वारा उपयोग किया जाने वाला डेटा प्रारूप पायथन संस्करणों में संगत नहीं है (यहां तक कि तोड़फोड़ भी नहीं)। यही कारण है कि एक संस्करण की एक संकलित पायथन लिपि (.pyc फ़ाइल) संभवतः दूसरे पर निष्पादित नहीं होगी। इस प्रकार मार्शल मॉड्यूल का उपयोग पायथन के आंतरिक वस्तु क्रमांकन के लिए किया जाता है।
अचार मॉड्यूल की तरह, मार्शल मॉड्यूल ने लोड () और डंप () कार्यों को मार्शल ऑब्जेक्ट्स को / से फाइल में पढ़ने और लिखने के लिए परिभाषित किया। इसके अलावा, लोड () और डंप () फ़ंक्शन मार्शल ऑब्जेक्ट के एक स्ट्रिंग प्रतिनिधित्व के साथ सौदा करते हैं।
डंप () - एक बाइट को एक ऑब्जेक्ट की तरह लौटाता है जो एक पायथन ऑब्जेक्ट को मार्शल करता है। मार्शलिंग के लिए केवल मानक डेटा प्रकार के ऑब्जेक्ट समर्थित हैं। असमर्थित प्रकार ValueError अपवाद बढ़ाते हैं।
लोड () - यह फ़ंक्शन बाइट जैसी वस्तु को संबंधित पायथन ऑब्जेक्ट में परिवर्तित करता है। यदि रूपांतरण का परिणाम मान्य पायथन ऑब्जेक्ट में नहीं होता है, तो ValueError या TypeError उठाया जा सकता है।
निम्नलिखित कोड डंप () का उपयोग करके एक पायथन डिक्शनरी ऑब्जेक्ट को मार्शल करता है। बाइट प्रतिनिधित्व को लोड () फ़ंक्शन द्वारा वापस शब्दकोश में बदल दिया जाता है।
import marshal person = {"name":"xyz", "age":22, "marks":[45,56,78]} data = marshal.dumps(person) obj = marshal.loads(data) print (obj)
डंप () - यह फ़ंक्शन किसी फ़ाइल में समर्थित पायथन ऑब्जेक्ट का बाइट प्रतिनिधित्व लिखता है। फ़ाइल स्वयं लिखने की अनुमति के साथ एक बाइनरी फ़ाइल हो
लोड () - यह फ़ंक्शन बाइनरी फ़ाइल से बाइट डेटा को पढ़ता है और इसे पायथन ऑब्जेक्ट में परिवर्तित करता है।
जैसा कि ऊपर बताया गया है, मार्शल मॉड्यूल का उपयोग .pyc फ़ाइलों को संसाधित करने के लिए किया जाता है। निम्नलिखित उदाहरण पायथन के कोड ऑब्जेक्ट्स को संभालने के लिए डंप () और लोड () फ़ंक्शन के उपयोग को दर्शाता है, जो पहले से संकलित पायथन मॉड्यूल को स्टोर करने के लिए उपयोग किया जाता है।
कोड एक स्रोत स्ट्रिंग से कोड ऑब्जेक्ट बनाने के लिए बिल्ट-इन कंपाइल () फ़ंक्शन का उपयोग करता है जो पायथन निर्देशों को एम्बेड करता है।
compile(source, file, mode)
फ़ाइल पैरामीटर वह फ़ाइल होनी चाहिए जिससे कोड पढ़ा गया था। अगर इसे किसी फ़ाइल से नहीं पढ़ा गया है तो कोई भी मनमाना स्ट्रिंग पास करें।
मोड पैरामीटर 'निष्पादन' है यदि स्रोत में कथनों का एक क्रम है, 'eval' यदि कोई एकल व्यंजक है या 'एकल' है यदि उसमें एक एकल संवादात्मक कथन है।
कंपाइल कोड ऑब्जेक्ट को तब डंप () फ़ंक्शन का उपयोग करके एक .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 फ़ाइल से ऑब्जेक्ट को डिसेरिएलाइज़ करने के लिए लोड () फ़ंक्शन का उपयोग करें। चूंकि यह एक कोड ऑब्जेक्ट देता है, इसलिए इसे निष्पादन (), एक अन्य अंतर्निहित फ़ंक्शन का उपयोग करके चलाया जा सकता है।
import marshal f = open("a.pyc","rb") data = marshal.load(f) exec (data)
आउटपुट स्रोत स्ट्रिंग में एम्बेड किए गए कोड ब्लॉक का परिणाम होगा
addition = 30