उन्नत पायथन विकास पाठ्यक्रम
अध्याय
>
स्तर
सीरियलाइज़ेशन-मॉड्यूल्स
संकुचन मॉड्यूल्स
उद्देश्य
संदेशों और आदेशों को संग्रहण और संचारण के लिए संपीड़ित करें।
कई निर्माण निर्देश, शिपमेंट और मैनिफेस्ट जमा किए जा चुके हैं जिन्हें स्थानांतरित या संग्रहीत करने की आवश्यकता है। इन सबको मैन्युअल रूप से भेजा जा सकता है, लेकिन एक अच्छा तरीका यह है कि फाइलों को संपीड़ित और डिकंप्रेस किया जाए, फिर संग्रहित या भेजा जाए। ऐसा करने के लिए, आप संपीड़न मॉड्यूल का उपयोग कर सकते हैं ताकि फाइल का आकार कम हो और जानकारी को प्रबंधित करना सरल हो जाए। अन्य समस्याओं से अलग जहां हमने एक ही मॉड्यूल सीखा और उसका उपयोग किया, यहां कई संपीड़न मॉड्यूल हैं जिनका उपयोग हम विभिन्न कार्यों के लिए कर सकते हैं। वे इस प्रकार हैं:
तेजी से संपीड़न गति और कम संपीड़न के लिए, 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() फ़ंक्शन का उपयोग करते हुए 'utf-8' प्रारूप में, इस प्रकार: 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 की len() संग्रहीत करें।
एक बार दोनों चर भर जाएँ, पहले से लिखे गए write() फ़ंक्शन का उपयोग करें और message_length तथा compression_length चरों को तर्क के रूप में डालें ताकि संपीड़न आकारों को सत्यापित किया जा सके। यह दर्शाता है कि फाइल संपीड़ित न होने की तुलना में कितना संपीड़ित है।
नीले कालीन पर स्थित अंधेरे X चिन्ह तक जाएँ और कंप्यूटर के सामने जाएँ। एक चर blue_bytes बनाएं और blue_message को उसी तरीके से बाइट्स में परिवर्तित करें जैसे आपने red_message के साथ किया था, bytes() फ़ंक्शन का उपयोग करते हुए। blue_message स्थिरांक लें और इसे संपीड़ित करें, bz2.compress() के मान को संग्रहित करके और 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 बनाएं और green_message को उसी तरीके से बाइट्स में परिवर्तित करें जैसे आपने red_message और blue_message के साथ किया था, bytes() फ़ंक्शन का उपयोग करते हुए।
एक चर green_compression बनाएं और compressor.compress() का मान संग्रहित करें, जिसमें green_bytes को तर्क के रूप में जोड़ा जाए। इससे आप कम्प्रेसर वस्तु का उपयोग करके संदेश डेटा को संपीड़ित कर सकते हैं। पहले से लिखे गए display() फ़ंक्शन में green_message और green_compression चरों को तर्क के रूप में जोड़ें ताकि संदेश और संपीड़ित डेटा देखा जा सके।
हरे कालीन पर स्थित हल्के X चिन्ह तक जाएँ और मेज़ के सामने जाएँ, दो चरों message_length और compression_length को संशोधित करें। इन चरों में हम len() फ़ंक्शन का उपयोग करके संपीड़न से पहले और बाद में डेटा की अक्षर लंबाई संग्रहीत करेंगे। message_length के लिए green_message की लंबाई len() के साथ प्राप्त करें। उसी प्रकार compression_length के लिए green_compression की len() संग्रहीत करें। एक बार दोनों चर भर जाने के बाद, पहले से लिखे गए write() फ़ंक्शन का उपयोग करें और message_length तथा compression_length को तर्क के रूप में डालें ताकि संपीड़न आकारों की पुष्टि की जा सके और स्तर पूरा हो सके।