उन्नत पायथन विकास पाठ्यक्रम
अध्याय
>
स्तर
सीरियलाइजेशन मॉड्यूल्स
संपीड़न मॉड्यूल
उद्देश्य
संदेशों और आदेशों को संग्रहण और प्रेषण के लिए संपीड़ित करें।
कई निर्माण निर्देश, शिपमेंट्स और मैनिफेस्ट्स जमा किए गए हैं जिन्हें ट्रांसफ़र या आर्काइव करना है। इन्हें मैन्युअल रूप से भेजने के बजाय फ़ाइलों को संपीड़ित और डी-संपीड़ित करके स्टोर या भेजना एक अच्छा तरीका है। इसके लिए, आप संपीड़न मॉड्यूल का उपयोग कर सकते हैं ताकि फ़ाइल का आकार घटे और जानकारी को प्रबंधित करना आसान हो जाए। पिछली समस्याओं में जहाँ हमने एक ही मॉड्यूल सीखा और उपयोग किया था, वहाँ के विपरीत, यहाँ कई संपीड़न मॉड्यूल हैं जिनका उपयोग हम कुछ फ़ंक्शंस के साथ कर सकते हैं। वे इस प्रकार हैं:
तेज़ संपीड़न गति और कम संपीड़न के लिए zlib मॉड्यूल का उपयोग करें, इसे शामिल करने के लिए import zlib लिखें। हमारे उद्देश्य के लिए हम निम्नलिखित फ़ंक्शन का उपयोग करेंगे: zlib.compress() जो एक आर्गुमेंट लेता है, जो उस जानकारी को संपीड़ित करना है। यह आर्गुमेंट स्ट्रिंग के बजाय बाइट्स में दिया जाना चाहिए।
मध्यम संपीड़न गति और मध्यम संपीड़न के लिए bz2 मॉड्यूल का उपयोग करें, इसे शामिल करने के लिए import bz2 लिखें। हमारे उद्देश्य के लिए हम निम्नलिखित फ़ंक्शंस का उपयोग करेंगे:
bz2.compress(), एक आर्गुमेंट लेता है, जो संपीड़ित करने वाली जानकारी है।bz2.decompress(), एक आर्गुमेंट लेता है, जो डी-संपीड़ित करने वाली जानकारी है। इसे स्ट्रिंग के बजाय बाइट्स में दिया जाना चाहिए।
ये आर्गुमेंट्स स्ट्रिंग के बजाय बाइट्स में दिए जाने चाहिए।
उच्च संपीड़न लेकिन धीमी संपीड़न गति के लिए lzma मॉड्यूल का उपयोग करें, इसे शामिल करने के लिए import lzma लिखें। हमारे उद्देश्य के लिए हम निम्नलिखित क्लासेस और फ़ंक्शंस का उपयोग करेंगे:
lzma.LZMACompressor(): एक क्लास है जो संपीड़न ऑब्जेक्ट्स बनाती है, जिससे आप एक कंप्रेसर को सक्रिय कर सकते हैं।compress(): एक आर्गुमेंट लेता है, जो संपीड़ित करने वाली जानकारी है। इसे स्ट्रिंग के बजाय बाइट्स में दिया जाना चाहिए। आर्गुमेंट स्ट्रिंग के बजाय बाइट्स में दिया जाना चाहिए।
इन मॉड्यूल्स के अतिरिक्त, हम bytes() फ़ंक्शन का उपयोग करेंगे, जो स्ट्रिंग्स को बाइट्स में बदलने की सुविधा देता है, जो संपीड़न के लिए उपयोगी होगा। यह दो आर्गुमेंट्स लेता है: पहली वह स्ट्रिंग जिसे आप बदलना चाहते हैं, और दूसरी फॉर्मेट, जो हमारे मामले में 'utf-8' है।
तीन कॉन्स्टेंट्स हैं जिनमें संपीड़ित किए जाने वाले डेटा होते हैं, ये हैं red_message, blue_message और green_message। सबसे पहले, रेड कार्पेट पर गोल्ड X मार्क की ओर जाएँ और red_bytes नाम का एक वेरिएबल बनाएं। red_message कॉन्स्टेंट लें और bytes() फ़ंक्शन का उपयोग करके इसे बाइट्स में बदलें ताकि डेटा को संपीड़ित किया जा सके, जैसे: red_bytes = bytes(red_message, 'utf-8')।
एक वेरिएबल red_compression बनाएं और उसमें zlib.compress() का मान स्टोर करें। red_bytes को आर्गुमेंट के रूप में उपयोग करें जिससे डेटा संपीड़ित होगा, जैसे: red_compression = zlib.compress(red_bytes)। डेटा संपीड़ित हो जाने के बाद, कोड एडिटर में पहले से लिखी गई display() फ़ंक्शन का उपयोग करें और इसमें red_message और red_compression वेरिएबल्स को आर्गुमेंट के रूप में डालें ताकि संदेश पढ़ा जा सके और संपीड़न डेटा दिखाया जा सके।
लाइट X मार्क की ओर जाएँ जो रेड कार्पेट पर है और डेस्क की ओर मुड़ें। message_length और compression_length नाम के दो वेरिएबल बनाएं। इन वेरिएबल्स में हम len() फ़ंक्शन का उपयोग करके डेटा की लंबाई को संपीड़न से पहले और बाद में स्टोर करेंगे। उदाहरण के लिए, message_length के लिए red_message की लंबाई इस तरह प्राप्त करें: message_length = len(red_message)। इसी तरह, compression_length के लिए red_compression की लंबाई स्टोर करें: compression_length = len(red_compression)。
दोनों वेरिएबल्स भर जाने के बाद, पहले से लिखी गई write() फ़ंक्शन का उपयोग करें और इसमें message_length और compression_length को आर्गुमेंट्स के रूप में डालें ताकि संपीड़न साइज़ की पुष्टि की जा सके। यह दिखाता है कि फाइल कितनी कम होती है जब इसे बिना संपीड़ित छोड़ा जाता है।
नीले कार्पेट पर डार्क X मार्क की ओर जाएँ और कंप्यूटर की तरफ देखें। blue_bytes नाम का एक वेरिएबल बनाएं और bytes() फ़ंक्शन का उपयोग करके blue_message को बाइट्स में बदलें, ठीक उसी तरह जैसे आपने red_message के साथ किया था। फिर bz2.compress() का मान स्टोर करके blue_message कॉन्स्टेंट को संपीड़ित करें और blue_bytes को आर्गुमेंट के रूप में डालें, जैसे: blue_message = bz2.compress(blue_bytes)。
एक वेरिएबल blue_decompress बनाएं और उसमें bz2.decompress() का मान स्टोर करें, और blue_message को आर्गुमेंट के रूप में डालें ताकि डी-संपीड़न के बाद डेटा देखा जा सके। पहले से लिखी गई display() फ़ंक्शन में blue_message और blue _decompress वेरिएबल्स को डालें ताकि संदेश डेटा के संपीड़ित और डी-संपीड़ित संस्करण देखे जा सकें।
हरी कार्पेट पर डार्क X मार्क की ओर जाएँ और compressor नाम का एक ऑब्जेक्ट बनाएं और इसमें lzma.LZMACompressor() असाइन करें; यह एक कंप्रेसर ऑब्जेक्ट बनाएगा जिसे lzma फ़ंक्शंस के साथ उपयोग किया जा सकता है। green_bytes नाम का एक वेरिएबल बनाएं और bytes() फ़ंक्शन का उपयोग करके green_message को बाइट्स में बदलें, ठीक वैसे ही जैसे आपने red_message और blue message के साथ किया था।
एक वेरिएबल green_compression बनाएं और इसमें compressor.compress() का मान स्टोर करें, और green_bytes को आर्गुमेंट के रूप में डालें। इससे आप कंप्रेसर ऑब्जेक्ट का उपयोग करके संदेश डेटा को संपीड़ित कर सकेंगे। पहले से लिखी गई display() फ़ंक्शन में green_message और green_compression वेरिएबल्स को आर्गुमेंट्स के रूप में डालें ताकि आप संदेश और संपीड़ित डेटा देख सकें।
हरी कार्पेट पर लाइट X मार्क की ओर जाएँ और डेस्क की तरफ देखें। message_length और compression_length नाम के दो वेरिएबल्स को संशोधित करें। इन वेरिएबल्स में हम len() फ़ंक्शन का उपयोग करके डेटा की लंबाई को संपीड़न से पहले और बाद में स्टोर करेंगे। message_length के लिए green_message की लंबाई इस तरह प्राप्त करें: message_length = len(green_message)। compression_length के लिए green_compression की लंबाई स्टोर करें: compression_length = len(green_compression)। दोनों वेरिएबल्स भर जाने के बाद, पहले से लिखी गई write() फ़ंक्शन का उपयोग करें और इसमें message_length और compression_length को आर्गुमेंट्स के रूप में डालें ताकि संपीड़न साइज़ की पुष्टि हो सके और लेवल पूरा हो।