Python 3.7

zlib - gzip के साथ संगत संपीड़न




python

zlib - gzip के साथ संगत संपीड़न

डेटा संपीड़न की आवश्यकता वाले अनुप्रयोगों के लिए, इस मॉड्यूल में फ़ंक्शन zlib लाइब्रेरी का उपयोग करके संपीड़न और विघटन की अनुमति देता है। Zlib लाइब्रेरी का अपना होम पेज http://www.zlib.net है । 1.1.3 की तुलना में पहले पायथन मॉड्यूल और ज़ालिब लाइब्रेरी के संस्करणों के बीच असंगतताएं हैं; 1.1.3 में सुरक्षा भेद्यता है, इसलिए हम 1.1.4 या बाद में उपयोग करने की सलाह देते हैं।

zlib के कार्यों के कई विकल्प हैं और अक्सर इन्हें किसी विशेष क्रम में उपयोग करने की आवश्यकता होती है। यह दस्तावेज़ सभी क्रमपरिवर्तन को कवर करने का प्रयास नहीं करता है; आधिकारिक सूचना के लिए http://www.zlib.net/manual.html पर zlib मैनुअल से परामर्श करें।

पढ़ने और लिखने के लिए .gz फाइलें gzip मॉड्यूल को देखती हैं।

इस मॉड्यूल में उपलब्ध अपवाद और कार्य हैं:

exception zlib.error

अपवाद संपीड़न और विघटन त्रुटियों पर उठाया।

zlib.adler32(data[, value])

डेटा के एडलर -32 चेकसम की गणना करता है। (एक एडलर -32 चेकसम CRC32 के रूप में लगभग विश्वसनीय है, लेकिन बहुत अधिक जल्दी से गणना की जा सकती है।) परिणाम एक अहस्ताक्षरित 32-बिट पूर्णांक है। यदि मान मौजूद है, तो इसका उपयोग चेकसम के शुरुआती मूल्य के रूप में किया जाता है; अन्यथा, 1 का डिफ़ॉल्ट मान उपयोग किया जाता है। मूल्य में उत्तीर्ण होने से कई आदानों के संयोजन पर चल रहे चेकसम की गणना करने की अनुमति मिलती है। एल्गोरिथ्म क्रिप्टोग्राफिक रूप से मजबूत नहीं है, और इसका उपयोग प्रमाणीकरण या डिजिटल हस्ताक्षर के लिए नहीं किया जाना चाहिए। चूंकि एल्गोरिथ्म एक चेकसम एल्गोरिथ्म के रूप में उपयोग के लिए डिज़ाइन किया गया है, इसलिए यह सामान्य हैश एल्गोरिथ्म के रूप में उपयोग करने के लिए उपयुक्त नहीं है।

संस्करण 3.0 में परिवर्तित: हमेशा एक अहस्ताक्षरित मान लौटाता है। सभी पायथन संस्करणों और प्लेटफार्मों पर समान संख्यात्मक मान उत्पन्न करने के लिए, adler32(data) & 0xffffffff

zlib.compress(data, level=-1)

डेटा में बाइट्स को संपीड़ित करता है, एक बाइट ऑब्जेक्ट को संपीड़ित डेटा देता है। स्तर 0 से 9 या -1 से पूर्णांक है जो संपीड़न के स्तर को नियंत्रित करता है; 1 (Z_BEST_SPEED) सबसे तेज है और कम से कम संपीड़न पैदा करता है, 9 (Z_BEST_COMPRESSION) सबसे धीमा है और सबसे अधिक उत्पादन करता है। 0 (Z_NO_COMPRESSION) कोई संपीड़न नहीं है। डिफ़ॉल्ट मान -1 (Z_DEFAULT_COMPRESSION) है। Z_DEFAULT_COMPRESSION गति और संपीड़न (वर्तमान में स्तर 6 के बराबर) के बीच एक डिफ़ॉल्ट समझौता दर्शाता है। यदि कोई त्रुटि होती है, तो error अपवाद को उठाता है।

संस्करण 3.6 में परिवर्तित: स्तर अब एक कीवर्ड पैरामीटर के रूप में उपयोग किया जा सकता है।

zlib.compressobj(level=-1, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY[, zdict])

एक संपीड़न ऑब्जेक्ट लौटाता है, जिसका उपयोग डेटा स्ट्रीम को संपीड़ित करने के लिए किया जाता है जो एक बार में मेमोरी में फिट नहीं होंगे।

स्तर संपीड़न स्तर है - 0 से 9 या -1 से पूर्णांक। 1 (Z_BEST_SPEED) का मान सबसे तेज़ है और कम से कम संपीड़न पैदा करता है, जबकि 9 (Z_BEST_COMPRESSION) का मान सबसे धीमा है और सबसे अधिक उत्पादन करता है। 0 (Z_NO_COMPRESSION) कोई संपीड़न नहीं है। डिफ़ॉल्ट मान -1 (Z_DEFAULT_COMPRESSION) है। Z_DEFAULT_COMPRESSION गति और संपीड़न (वर्तमान में स्तर 6 के बराबर) के बीच एक डिफ़ॉल्ट समझौता दर्शाता है।

विधि संपीड़न एल्गोरिथ्म है। वर्तमान में, एकमात्र समर्थित मान DEFLATED

डेटा को संपीड़ित करते समय उपयोग किए जाने वाले इतिहास बफ़र (या "विंडो का आकार") के आकार को नियंत्रित करता है, और क्या हेडर और ट्रेलर आउटपुट में शामिल हैं। यह 15 (MAX_WBITS) के लिए कई मानों की सीमा ले सकता है:

  • +9 से +15: खिड़की के आकार का आधार-दो लघुगणक, जो कि 512 और 32768 के बीच होता है। बड़े मान अधिक स्मृति उपयोग की कीमत पर बेहतर संपीड़न उत्पन्न करते हैं। परिणामी आउटपुट में zlib- विशिष्ट हेडर और ट्रेलर शामिल होंगे।
  • −9 से :15: बिना किसी हेडर या ट्रेलिंग चेकसम के एक कच्चे आउटपुट स्ट्रीम का निर्माण करते हुए, विंडो आकार के लघुगणक के रूप में वैब के पूर्ण मान का उपयोग करता है।
  • 5.2 से +31 = 16 + (9 से 15): आउटपुट में मूल gzip हेडर और ट्रेलिंग चेकसम सहित विंडो साइज लॉगरिदम के रूप में मान के निम्न 4 बिट्स का उपयोग करता है।

मेमेवेल तर्क आंतरिक संपीड़न स्थिति के लिए उपयोग की जाने वाली स्मृति की मात्रा को नियंत्रित करता है। मान्य मान 1 से 9 । उच्चतर मान अधिक मेमोरी का उपयोग करते हैं, लेकिन तेज़ होते हैं और छोटे आउटपुट उत्पन्न करते हैं।

रणनीति का उपयोग संपीड़न एल्गोरिदम को ट्यून करने के लिए किया जाता है। संभावित मूल्य Z_DEFAULT_STRATEGY , Z_FILTERED , Z_HUFFMAN_ONLY , Z_RLE (zlib 1.2.0.1) और Z_FIXED (zlib 1.2.2.2) हैं।

zdict एक पूर्वनिर्धारित संपीड़न शब्दकोश है। यह बाइट्स का एक क्रम है (जैसे कि bytes ऑब्जेक्ट) जिसमें बाद में होने वाले डेटा में होने वाली अपेक्षाओं को सम्‍मिलित किया जाना है। वे अनुवर्ती जो सबसे आम होने की उम्मीद है, उन्हें शब्दकोश के अंत में आना चाहिए।

संस्करण 3.3 में परिवर्तित: zdict पैरामीटर और कीवर्ड तर्क समर्थन जोड़ा गया।

zlib.crc32(data[, value])

एक सीआरसी (चक्रीय अतिरेक जाँच) डेटा के चेकसम की गणना करता है । परिणाम एक अहस्ताक्षरित 32-बिट पूर्णांक है। यदि मान मौजूद है, तो इसका उपयोग चेकसम के शुरुआती मूल्य के रूप में किया जाता है; अन्यथा, 0 का डिफ़ॉल्ट मान उपयोग किया जाता है। मूल्य में उत्तीर्ण होने से कई आदानों के संयोजन पर चल रहे चेकसम की गणना करने की अनुमति मिलती है। एल्गोरिथ्म क्रिप्टोग्राफिक रूप से मजबूत नहीं है, और इसका उपयोग प्रमाणीकरण या डिजिटल हस्ताक्षर के लिए नहीं किया जाना चाहिए। चूंकि एल्गोरिथ्म एक चेकसम एल्गोरिथ्म के रूप में उपयोग के लिए डिज़ाइन किया गया है, इसलिए यह सामान्य हैश एल्गोरिथ्म के रूप में उपयोग करने के लिए उपयुक्त नहीं है।

संस्करण 3.0 में परिवर्तित: हमेशा एक अहस्ताक्षरित मान लौटाता है। सभी पायथन संस्करणों और प्लेटफार्मों पर समान संख्यात्मक मान उत्पन्न करने के लिए, crc32(data) & 0xffffffff

zlib.decompress(data, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)

डेटा में बाइट्स को घटाता है, एक बाइट ऑब्जेक्ट को असम्पीडित डेटा को वापस करता है। वैप्स पैरामीटर डेटा के प्रारूप पर निर्भर करता है, और आगे नीचे चर्चा की गई है। यदि bufsize दिया जाता है, तो इसका उपयोग आउटपुट बफर के प्रारंभिक आकार के रूप में किया जाता है। यदि कोई त्रुटि होती है, तो error अपवाद को उठाता है।

वॉबिट पैरामीटर इतिहास बफ़र (या "विंडो आकार") के आकार को नियंत्रित करता है, और हेडर और ट्रेलर प्रारूप क्या अपेक्षित है। यह कंप्रोबोब के पैरामीटर के समान है compressobj() , लेकिन मानों की अधिक श्रेणियों को स्वीकार करता है:

  • +8 से +15: खिड़की के आकार का आधार-दो लघुगणक। इनपुट में zlib हेडर और ट्रेलर शामिल होना चाहिए।
  • 0: zlib हेडर से विंडो का आकार स्वचालित रूप से निर्धारित करें। केवल zlib 1.2.3.5 के बाद से समर्थित है।
  • −8 से :15: खिड़की के आकार के लघुगणक के रूप में तारों के निरपेक्ष मूल्य का उपयोग करता है। इनपुट कोई हेडर या ट्रेलर के साथ एक कच्ची धारा होना चाहिए।
  • 768 से +31 = 16 + (8 से 15): खिड़की के आकार के लघुगणक के रूप में मूल्य के निम्न 4 बिट्स का उपयोग करता है। इनपुट में एक gzip हेडर और ट्रेलर शामिल होना चाहिए।
  • +40 से +47 = 32 + (8 से 15): खिड़की के आकार के लघुगणक के रूप में मान के निम्न 4 बिट्स का उपयोग करता है, और स्वचालित रूप से या तो zlib या gzip प्रारूप को स्वीकार करता है।

जब एक धारा को विघटित किया जाता है, तो खिड़की का आकार मूल रूप से धारा को संपीड़ित करने के लिए उपयोग किए जाने वाले आकार से छोटा नहीं होना चाहिए; बहुत छोटे मूल्य का उपयोग करने से error अपवाद हो सकती है। डिफॉल्ट वॉबिट वैल्यू सबसे बड़े विंडो साइज से मेल खाती है और इसमें zlib हेडर और ट्रेलर को शामिल करने की आवश्यकता होती है।

bufsize विघटित डेटा को पकड़ने के लिए उपयोग किए जाने वाले बफर का प्रारंभिक आकार है। यदि अधिक स्थान की आवश्यकता होती है, तो बफर आकार को आवश्यकतानुसार बढ़ाया जाएगा, इसलिए आपको यह मान बिल्कुल सही नहीं मिलेगा; इसे ट्यून करने से malloc() को केवल कुछ कॉल बचेंगे।

संस्करण 3.6 में परिवर्तित: कीवर्ड तर्क के रूप में wbits और bufsize का उपयोग किया जा सकता है।

zlib.decompressobj(wbits=MAX_WBITS[, zdict])

एक विघटित वस्तु लौटाता है, जिसका उपयोग डेटा धाराओं को एक बार में मेमोरी में फिट नहीं होने के लिए उपयोग किया जाएगा।

वॉबिट पैरामीटर इतिहास बफ़र (या "विंडो आकार") के आकार को नियंत्रित करता है, और हेडर और ट्रेलर प्रारूप क्या अपेक्षित है। इसका वही अर्थ है जो डीकंप्रेस () के लिए वर्णित है

Zdict पैरामीटर एक पूर्वनिर्धारित संपीड़न शब्दकोश निर्दिष्ट करता है। यदि प्रदान किया गया है, तो यह उसी शब्दकोश होना चाहिए जैसा कि कंप्रेसर द्वारा उपयोग किया गया था जो डेटा का उत्पादन करता है जो कि विघटित होना है।

ध्यान दें

यदि zdict एक उत्परिवर्तनीय वस्तु है (जैसे कि एक bytearray ), तो आपको कॉल करने के लिए इसकी सामग्री को decompressobj() और पहली कॉल को decompressor के decompress() विधि में संशोधित नहीं करना चाहिए।

संस्करण 3.3 में बदला: zdict पैरामीटर जोड़ा गया।

संपीड़न ऑब्जेक्ट्स निम्न विधियों का समर्थन करते हैं:

Compress.compress(data)

डेटा को संपीड़ित करें , डेटा में कम से कम भाग के लिए संपीड़ित डेटा युक्त बाइट ऑब्जेक्ट लौटाता है। इस डेटा को compress() विधि के लिए किसी भी पूर्ववर्ती कॉल द्वारा उत्पादित आउटपुट के लिए compress() किया जाना चाहिए। बाद के प्रसंस्करण के लिए कुछ इनपुट आंतरिक बफर में रखे जा सकते हैं।

Compress.flush([mode])

सभी लंबित इनपुट को संसाधित किया जाता है, और एक बाइट ऑब्जेक्ट जिसमें शेष संपीड़ित आउटपुट होता है, वापस आ जाता है। मोड को Z_NO_FLUSH , Z_PARTIAL_FLUSH , Z_SYNC_FLUSH , Z_FULL_FLUSH , Z_BLOCK (zlib 1.2.3.4), या Z_FINISH से डिफ़ॉल्ट रूप से Z_FINISHZ_FINISH छोड़कर, सभी स्थिरांक डेटा के आगे बाइट्स को संपीड़ित करने की अनुमति देते हैं, जबकि Z_FINISH संपीड़ित स्ट्रीम को समाप्त करता है और किसी भी अधिक डेटा को संपीड़ित करने से रोकता है। Z_FINISH सेट मोड के साथ flush() कॉल करने के बाद, compress() विधि को फिर से नहीं बुलाया जा सकता है; ऑब्जेक्ट को हटाने के लिए एकमात्र यथार्थवादी कार्रवाई है।

Compress.copy()

संपीड़न वस्तु की एक प्रति लौटाता है। इसका उपयोग कुशलतापूर्वक डेटा के एक सेट को संपीड़ित करने के लिए किया जा सकता है जो एक सामान्य प्रारंभिक उपसर्ग साझा करते हैं।

Decompression ऑब्जेक्ट्स निम्न विधियों और विशेषताओं का समर्थन करते हैं:

Decompress.unused_data

एक बाइट्स ऑब्जेक्ट जिसमें संपीड़ित डेटा के अंत में किसी भी बाइट्स होते हैं। यही है, यह अंतिम बाइट तक b"" रहता है जिसमें संपीड़न डेटा उपलब्ध होता है। यदि पूरे बाइटस्ट्रिंग को संपीड़ित डेटा शामिल किया गया है, तो यह b"" , एक खाली बाइट ऑब्जेक्ट।

Decompress.unconsumed_tail

एक बाइट्स ऑब्जेक्ट जिसमें कोई भी डेटा होता है जो कि अंतिम decompress() कॉल द्वारा उपभोग नहीं किया गया था क्योंकि यह असम्पीडित डेटा बफर के लिए सीमा से अधिक था। यह डेटा अभी तक zlib मशीनरी द्वारा नहीं देखा गया है, इसलिए आपको इसे सही आउटपुट प्राप्त करने के लिए इसे बाद के decompress() विधि कॉल पर वापस फीड करना चाहिए (संभवत: इसके आगे के डेटा के साथ)।

Decompress.eof

एक बूलियन जो दर्शाता है कि संपीड़ित डेटा स्ट्रीम का अंत हो गया है या नहीं।

यह एक उचित रूप से गठित संपीड़ित धारा और एक अपूर्ण या छंटनी के बीच अंतर करना संभव बनाता है।

संस्करण 3.3 में नया।

Decompress.decompress(data, max_length=0)

Decompress data , स्ट्रिंग में डेटा के कम से कम हिस्से के अनुरूप असम्पीडित डेटा वाली बाइट ऑब्जेक्ट लौटाता है। इस डेटा को decompress() विधि के लिए किसी भी पूर्ववर्ती कॉल द्वारा उत्पादित आउटपुट के लिए संक्षिप्त किया जाना चाहिए। कुछ इनपुट डेटा को बाद के प्रसंस्करण के लिए आंतरिक बफर में संरक्षित किया जा सकता है।

यदि वैकल्पिक पैरामीटर max_length गैर-शून्य है तो रिटर्न वैल्यू max_length से अधिक नहीं होगी। इसका मतलब यह हो सकता है कि सभी संपीड़ित इनपुट को संसाधित नहीं किया जा सकता है; और अचेतन डेटा को विशेषता unconsumed_tail में संग्रहीत किया जाएगा। यदि डिकम्प्रेसन को जारी रखना है, तो इस बायट्रैस्ट को डिकम्प्रेस decompress() को कॉल करने के लिए पास किया जाना चाहिए। यदि max_length शून्य है तो पूरा इनपुट विघटित हो जाता है, और unconsumed_tail खाली हो जाता है।

संस्करण 3.6 में बदला गया: max_length का उपयोग एक कीवर्ड तर्क के रूप में किया जा सकता है।

Decompress.flush([length])

सभी लंबित इनपुट को संसाधित किया जाता है, और बाइट ऑब्जेक्ट को शेष असम्पीडित आउटपुट से युक्त किया जाता है। flush() कॉल करने के बाद, decompress() विधि को फिर से नहीं बुलाया जा सकता है; ऑब्जेक्ट को हटाने के लिए एकमात्र यथार्थवादी कार्रवाई है।

वैकल्पिक पैरामीटर लंबाई आउटपुट बफर के प्रारंभिक आकार को निर्धारित करती है।

Decompress.copy()

विघटित वस्तु की एक प्रति लौटाता है। इसका उपयोग डेटा स्ट्रीम के माध्यम से डीकंप्रेसर मिडवे की स्थिति को बचाने के लिए किया जा सकता है ताकि भविष्य के बिंदु पर धारा को यादृच्छिक रूप से देखा जा सके।

उपयोग में zlib पुस्तकालय के संस्करण के बारे में जानकारी निम्नलिखित स्थिरांक के माध्यम से उपलब्ध है:

zlib.ZLIB_VERSION

Zlib पुस्तकालय का संस्करण स्ट्रिंग जो मॉड्यूल के निर्माण के लिए उपयोग किया गया था। यह वास्तव में रनटाइम पर उपयोग की जाने वाली zlib लाइब्रेरी से भिन्न हो सकता है, जो ZLIB_RUNTIME_VERSION रूप में उपलब्ध है।

zlib.ZLIB_RUNTIME_VERSION

Zlib लाइब्रेरी का संस्करण स्ट्रिंग वास्तव में दुभाषिया द्वारा लोड किया गया है।

संस्करण 3.3 में नया।

यह भी देखें

Module gzip
पढ़ना और लिखना gzip -format फाइलें।
http://www.zlib.net
Zlib पुस्तकालय मुख पृष्ठ।
http://www.zlib.net/manual.html
ज़ालिब मैनुअल पुस्तकालय के कई कार्यों के शब्दार्थ और उपयोग की व्याख्या करता है।