उन्नत पायथन विकास पाठ्यक्रम
अध्याय
>
स्तर

सीरियलाइजेशन मॉड्यूल्स
मार्शल और पिकल मॉड्यूल्स

उद्देश्य

सेवा स्टेशन पर जाएँ और JSON मॉड्यूल का उपयोग करके फाइलों को फॉर्मैट कर यह सुनिश्चित करें कि डेटा सही ढंग से स्टोर हुआ है।

पथ के साथ आगे बढ़ते हुए, हमें कुछ स्टेशन मिलते हैं जो उस भूमि के लिए जल वितरण और मिट्टी की गुणवत्ता की निगरानी करते हैं जिसे भविष्य की फ़सल के लिए विकसित किया जा रहा है। डेटा को संसाधित करने के लिए, डेटा का सीरियलाइजेशन करना कुशल होता है। हालांकि JSON का उपयोग एक सामान्य समाधान के रूप में प्रभावी हो सकता है, पर कुछ Python-विशिष्ट सीरियलाइजेशन विधियाँ भी हैं, जैसे Marshal और Pickle मॉड्यूल। Marshal मॉड्यूल तेज़ सीरियलाइज़ेशन/डीसीरियलाइज़ेशन के लिए डिज़ाइन किया गया है, जो डेटा को बाइनरी में परिवर्तित कर देता है, सरल डेटा स्थानांतरण के लिए आदर्श है। Pickle मॉड्यूल धीमा है लेकिन जटिल डेटा संरचनाओं को संसाधित करने के लिए डिज़ाइन किया गया है और अधिक लचीला है, बड़ी या प्राथमिकता वाली डेटा संरचनाओं के लिए आदर्श है।

Marshal और Pickle मॉड्यूल का उपयोग करने के लिए, उनके फ़ंक्शन इम्पोर्ट करें: import marshal और import pickle। हमारे उद्देश्यों के लिए, हम निम्नलिखित फ़ंक्शन उपयोग करेंगे:

  • marshal.dumps(): डेटा को बाइनरी फ़ॉर्मेट में सीरियलाइज़ करता है, Python के भीतर गति के लिए डिज़ाइन किया गया। यह एक तर्क लेता है, वह डेटा जिसे आप सीरियलाइज़ करना चाहते हैं, और यह केवल मूल डेटा प्रकारों तक सीमित है।
  • marshal.loads(): बाइनरी डेटा को Python पढ़ने योग्य डेटा प्रकारों में डीसीरियलाइज़ करता है, क्षमताओं में सीमित लेकिन तेज निष्पादन। यह एक तर्क लेता है, वह डेटा जिसे आप डीसीरियलाइज़ करना चाहते हैं।
  • pickle.DEFAULT_PROTOCOL: जांचता है कि आपके Python संस्करण में Pickle सीरियलाइज़ेशन के लिए कौन सा प्रोटोकॉल संस्करण डिफ़ॉल्ट है। प्रोटोकॉल प्रभावित करते हैं कि डेटा कैसे सीरियलाइज़ होता है।
  • pickle.HIGHEST_PROTOCOL: जांचता है कि आपके Python संस्करण में Pickle सीरियलाइज़ेशन के लिए उपलब्ध सबसे उच्च प्रोटोकॉल संस्करण कौन सा है। प्रोटोकॉल प्रभावित करते हैं कि डेटा कैसे सीरियलाइज़ होता है।
  • pickle.dumps(): जटिल Python डेटा संरचनाओं को बाइनरी फ़ॉर्मेट में सीरियलाइज़ करता है, उपयोग किए गए प्रोटोकॉल के अनुसार। यह दो तर्क लेता है: वह डेटा जिसे आप सीरियलाइज़ करना चाहते हैं और वह प्रोटोकॉल संस्करण जिसे आप सीरियलाइज़ करते समय उपयोग करना चाहते हैं।
  • pickle.loads(): बाइनरी डेटा को Python पढ़ने योग्य डेटा प्रकारों में डीसीरियलाइज़ करता है, Python ऑब्जेक्ट्स के लिए व्यापक क्षमता के साथ। यह एक तर्क लेता है, वह डेटा जिसे आप डीसीरियलाइज़ करना चाहते हैं।

इन मॉड्यूल और फ़ंक्शंस के अलावा, हम एक फॉर्मैटिंग मॉड्यूल pformat भी उपयोग करेंगे, जिसे हम इम्पोर्ट करेंगे: from pprint import pformat। यह हमें pformat() फ़ंक्शन का उपयोग करने की अनुमति देता है, जो dictionaries जैसी डेटा संरचनाओं को फॉर्मैट करके जानकारी को स्पष्ट रूप से प्रदर्शित करने में मदद करता है।

शुरू करने के लिए, छोटे मॉनिटरिंग स्टेशन के अंदर हल्के X निशान तक चलें और कंप्यूटर टर्मिनल की ओर मुख करें। यह स्टेशन पास के इलाके का जल दबाव और मिट्टी की स्थिति मॉनिटर करता है, जिसे फसल लगाने के लिए विकसित किया जा रहा है। एक constant है जिसका नाम reading है, इसमें स्टेशन द्वारा एकत्रित Python डेटा होता है।

एक वेरिएबल data बनाएं और उसमें marshal.dumps() फ़ंक्शन का मान स्टोर करें, जिसमें reading को आर्ग्यूमेंट के रूप में सेट किया गया हो। जैसे: data = marshal.dumps(reading)। सीरियलाइज़्ड डेटा देखने के लिए प्री-राइटेन display() फ़ंक्शन के साथ data वेरिएबल का उपयोग करें।

स्टेशन से बाहर निकलकर गोल्ड X निशान तक जाएँ, open() फ़ंक्शन का उपयोग करके दरवाज़ा खोलें और ऑफिस तक पहुँचें। टर्मिनल के सामने हल्के X निशान तक चलें और अब-अभी सीरियलाइज़ किया गया डेटा डीसीरियलाइज़ करें। एक वेरिएबल output बनाएं और उसमें marshal.loads() का मान स्टोर करें, जिसमें पिछला data वेरिएबल आर्ग्यूमेंट के रूप में हो। संग्रहित डेटा एक्सेस करने के लिए write() फ़ंक्शन का उपयोग करें और उसमें output को आर्ग्यूमेंट के रूप में जोड़ें।

ऑफिस में नीले कालीन पर हल्के X निशान तक चलें, टर्मिनल पर हम प्रोटोकॉल्स की जाँच करेंगे ताकि यह निर्धारित किया जा सके कि डेटा प्रक्रिया करते समय pickle मॉड्यूल कौन सा सीरियलाइज़ेशन प्रकार उपयोग करेगा। प्री-राइटेन write() फ़ंक्शन में आर्ग्यूमेंट्स को pickle.DEFAULT_PROTOCOL और pickle.HIGHEST_PROTOCOL सेट करें। इससे पता चल जाएगा कि वर्तमान में कौन सा सीरियलाइज़ेशन प्रोटोकॉल है और इस समय उपलब्ध नवीनतम प्रोटोकॉल कौन सा है।

नीले कालीन पर डार्क X निशान की ओर बढ़ें, अब जब हमने प्रोटोकॉल्स की पुष्टि कर ली है, तो हम संग्रहित डेटा को सत्यापित कर सकते हैं। महीनों के दौरान डेटा एकत्रित किया गया है और एक constant samples में संग्रहित है। तीन वेरिएबल बनाएं: sereal_0, sereal_2 और sereal_5, जिनका हम सीरियलाइज़ेशन के तीन अलग-अलग प्रोटोकॉल्स की जाँच के लिए उपयोग करेंगे। प्रोटोकॉल 0 पढ़ने योग्य ASCII है, बहुत कुशल नहीं; प्रोटोकॉल 2 अधिक कुशल बाइनरी फ़ॉर्मैट है; और प्रोटोकॉल 5 नवीनतम है, जिसमें सबसे जटिल सुविधाएँ जोड़ी गई हैं।

हम pickle.dumps() का मान स्टोर करेंगे और आर्ग्यूमेंट्स के रूप में samples constant और उस प्रोटोकॉल नंबर को सेट करेंगे जो वेरिएबल नाम से मेल खाता हो। उदाहरण के लिए, sereal_0 के लिए प्रोटोकॉल 0 सेट करें, जैसे: sereal_0 = pickle.dumps(samples, protocol=0)। प्रत्येक प्रोटोकॉल के सीरियलाइज़ेशन में अंतर देखने के लिए sereal_0, sereal_2 और sereal_5 के साथ प्री-राइटेन display() फ़ंक्शन का उपयोग करें।

लाल कालीन पर हल्के X निशान तक चलें और टर्मिनल की ओर मुख करें, output वेरिएबल को ओवरराइट करें और उसमें pickle.loads() का मान स्टोर करें, आर्ग्यूमेंट को sereal_5 सेट करके अब तक एकत्रित नमूना डेटा को डीसीरियलाइज़ करने के लिए। डेटा देखने के लिए display() फ़ंक्शन का उपयोग करें और output वेरिएबल के साथ pformat() फ़ंक्शन जोड़ें। जैसे: await player.display(pformat(output))। टर्मिनल में प्रदर्शित प्रत्येक महीने की रेटिंग्स को नोट कर लें ताकि आप उन्हें बाद में चार्ट कर सकें।

लाल कालीन पर डार्क X निशान की ओर चलें और डेस्क की ओर मुख करें, प्री-राइटेन write() फ़ंक्शन में, प्रत्येक महीने की वे रेटिंग्स जोड़ें जिन्हें आपने टर्मिनल में नोट किया था। उन्हें फंक्शन में दिए गए क्रम में, "" के साथ स्ट्रिंग्स के रूप में जोड़ें ताकि लेवल पूरा हो सके।

कोड बुक