Python 3.7 - marshal

मार्शल - आंतरिक पायथन वस्तु क्रमांकन




python

मार्शल - आंतरिक पायथन वस्तु क्रमांकन

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

यह एक सामान्य "दृढ़ता" मॉड्यूल नहीं है। आरपीसी कॉल के माध्यम से अजगर वस्तुओं के सामान्य दृढ़ता और हस्तांतरण के लिए, मॉड्यूल pickle और shelve marshal मॉड्यूल मुख्य रूप से .pyc फ़ाइलों के पायथन मॉड्यूल के लिए "छद्म-संकलित" कोड को पढ़ने और लिखने के लिए .pyc है। इसलिए, अजगर अनुरक्षकों को पिछड़े असंगत तरीकों से मार्शल प्रारूप को संशोधित करने का अधिकार सुरक्षित रखना चाहिए। यदि आप पायथन ऑब्जेक्ट्स को क्रमांकित और डी-सीरियल कर रहे हैं, तो इसके बजाय pickle मॉड्यूल का उपयोग करें - प्रदर्शन तुलनीय है, संस्करण की स्वतंत्रता की गारंटी है, और अचार मार्शल की तुलना में वस्तुओं की काफी व्यापक रेंज का समर्थन करता है।

चेतावनी

marshal मॉड्यूल का उद्देश्य गलत या दुर्भावनापूर्ण रूप से निर्मित डेटा के खिलाफ सुरक्षित नहीं है। एक अविश्वसनीय या अनौपचारिक स्रोत से प्राप्त अनमर्ष डेटा कभी नहीं।

सभी पायथन ऑब्जेक्ट प्रकार समर्थित नहीं हैं; सामान्य तौर पर, केवल ऐसी वस्तुएं जिनका मूल्य पायथन के विशेष आह्वान से स्वतंत्र होता है, को इस मॉड्यूल द्वारा लिखा और पढ़ा जा सकता है। निम्नलिखित प्रकारों का समर्थन किया जाता है: बुलियन, पूर्णांक, फ्लोटिंग पॉइंट नंबर, कॉम्प्लेक्स नंबर, स्ट्रिंग्स, बाइट्स, बाईट्रेप्स, टुपल्स, लिस्ट्स, फ्रेजेन्सेट्स, डिक्शनरी और कोड ऑब्जेक्ट्स, जहां इसे टुपल्स, लिस्ट्स, सेट्स, फ्रेजेन्सेट्स समझा जाना चाहिए। और शब्दकोश केवल तब तक समर्थित होते हैं जब तक उसमें निहित मूल्य स्वयं समर्थित होते हैं। सिंग्लेटन्स None , Ellipsis और StopIteration भी StopIteration और StopIteration हो सकते हैं। 3 से कम प्रारूप संस्करण के लिए, पुनरावर्ती सूची, सेट और शब्दकोश नहीं लिखे जा सकते हैं (नीचे देखें)।

ऐसे कार्य हैं जो फ़ाइलों को पढ़ने / लिखने के साथ-साथ बाइट्स जैसी वस्तुओं पर काम करते हैं।

मॉड्यूल इन कार्यों को परिभाषित करता है:

marshal.dump(value, file[, version])

खुले फ़ाइल पर मान लिखें। मान एक समर्थित प्रकार होना चाहिए। फ़ाइल एक लेखन योग्य बाइनरी फ़ाइल होनी चाहिए।

यदि मान में कोई असमर्थित प्रकार है (या कोई ऑब्जेक्ट है), तो ValueError अपवाद उठाया जाता है - लेकिन कचरा डेटा भी फ़ाइल में लिखा जाएगा। ऑब्जेक्ट को load() द्वारा ठीक से पढ़ा नहीं जाएगा।

संस्करण तर्क डेटा प्रारूप को इंगित करता है जो dump का उपयोग करना चाहिए (नीचे देखें)।

marshal.load(file)

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

ध्यान दें

यदि कोई असमर्थित प्रकार वाली वस्तु को dump() , load() के साथ अनअस्मरॉलबल प्रकार के लिए स्थानापन्न किया जाएगा।

marshal.dumps(value[, version])

बाइट ऑब्जेक्ट को dump(value, file) द्वारा फ़ाइल में लिखा जाएगा। मान एक समर्थित प्रकार होना चाहिए। यदि मान है (या एक ऑब्जेक्ट है जिसमें) एक असमर्थित प्रकार है, तो एक ValueError अपवाद उठाएँ।

संस्करण तर्क डेटा प्रारूप को इंगित करता है जो dumps का उपयोग करना चाहिए (नीचे देखें)।

marshal.loads(bytes)

बाइट्स-जैसे ऑब्जेक्ट को मान में बदलें। यदि कोई वैध मान नहीं EOFError , तो EOFError , ValueError या TypeError EOFError । इनपुट में अतिरिक्त बाइट्स को नजरअंदाज कर दिया जाता है।

इसके अलावा, निम्नलिखित स्थिरांक परिभाषित किए गए हैं:

marshal.version

मॉड्यूल द्वारा उपयोग किए जाने वाले प्रारूप का संकेत देता है। संस्करण 0 ऐतिहासिक प्रारूप है, संस्करण 1 साझा तार और संस्करण 2 अस्थायी बिंदु संख्याओं के लिए एक द्विआधारी प्रारूप का उपयोग करता है। संस्करण 3 ऑब्जेक्ट इंस्टेंसिंग और पुनरावृत्ति के लिए समर्थन जोड़ता है। वर्तमान संस्करण 4 है।

फुटनोट

[1] इस मॉड्यूल का नाम मोडुला -3 (अन्य के बीच) के डिजाइनरों द्वारा उपयोग की जाने वाली शब्दावली से थोड़ा उपजा है, जो "मार्शालिंग" शब्द का उपयोग स्वयं के रूप में डेटा के शिपिंग के लिए करते हैं। कड़ाई से बोलते हुए, "मार्शल के लिए" का अर्थ है कुछ डेटा को आंतरिक से बाहरी रूप में बदलना (उदाहरण के लिए एक आरपीसी बफर में) और रिवर्स प्रक्रिया के लिए "अनमरशलिंग"।