लेम्पेल-जिव-मार्कोव चेन एल्गोरिदम (LZMA) डिक्शनरी कम्प्रेशन स्कीम का उपयोग करके लॉसलेस डेटा कम्प्रेशन करता है जिसमें अन्य कम्प्रेशन एल्गोरिदम की तुलना में अधिक कम्प्रेशन अनुपात होता है। पायथन का lzma मॉड्यूल LZMA एल्गोरिदम के साथ डेटा के कम्प्रेशन और डीकम्प्रेशन के लिए क्लासेस और सुविधाजनक फ़ंक्शन्स से मिलकर बना है।
हालांकि इस मॉड्यूल में कार्यक्षमता bz2 मॉड्यूल के समान है, LZMAFile क्लास BZ2File क्लास की तुलना में थ्रेड-सेफ नहीं है।
यहां फिर से, lzma मॉड्यूल में open() फ़ंक्शन LZMA-कम्प्रेस्ड फ़ाइल ऑब्जेक्ट खोलने का सबसे आसान तरीका है।
open()
यह फ़ंक्शन LZMA-कम्प्रेस्ड फ़ाइल खोलता है और फ़ाइल ऑब्जेक्ट लौटाता है। फ़ंक्शन को दो मुख्य पैरामीटर्स की आवश्यकता होती है - फ़ाइल नाम और मोड। मोड पैरामीटर डिफ़ॉल्ट रूप से "rb" है लेकिन निम्न में से कोई भी मान ले सकता है:
बाइनरी मोड - "r", "rb", "w", "wb", "x", "xb", "a" या "ab" टेक्स्ट मोड - "rt", "wt", "xt", या "at"
compress()
यह फ़ंक्शन LZMA एल्गोरिदम का उपयोग करके दिए गए डेटा को कम्प्रेस करता है और बाइट ऑब्जेक्ट लौटाता है। इस फ़ंक्शन में वैकल्पिक रूप से एक फॉर्मेट तर्क हो सकता है जो कंटेनर फॉर्मेट तय करता है। संभावित मान FORMAT_XZ (डिफ़ॉल्ट) और FORMAT_ALONE हैं।
decompress()
यह फ़ंक्शन डेटा को डीकम्प्रेस करता है और अनकंप्रेस्ड बाइट ऑब्जेक्ट लौटाता है।
उपरोक्त फ़ंक्शन्स का उपयोग निम्न उदाहरणों में किया गया है। फ़ाइल में LZMA कम्प्रेस्ड डेटा लिखने के लिए:
>>> import lzma
>>> data = b"Welcome to TutorialsPoint"
>>> f = lzma.open("test.xz", "wb")
>>> f.write(data)
>>> f.close()
करंट वर्किंग डायरेक्टरी में 'test.xz' फ़ाइल बनेगी। इस फ़ाइल से अनकंप्रेस्ड डेटा प्राप्त करने के लिए निम्न कोड उपयोग करें।
>>> import lzma
>>> f = lzma.open("test.xz", "rb")
>>> data = f.read()
>>> data
b'Welcome to TutorialsPoint'
LZMAFile क्लास का उपयोग करके ऑब्जेक्ट-ओरिएंटेड API
lzma मॉड्यूल के ऑब्जेक्ट-ओरिएंटेड API का उपयोग करके कम्प्रेशन करने के लिए, हमें LZMAFile क्लास का उपयोग करना होगा।
LZMAFile()
यह LZMAFile क्लास का कंस्ट्रक्टर है। इसे फ़ाइल और मोड निर्दिष्ट करने की आवश्यकता होती है। 'w' या 'wb' मोड वाला ऑब्जेक्ट इसे write() मेथड उपलब्ध कराता है।
write()
यह मेथड दिए गए डेटा को कम्प्रेस करता है और इसे नीचे की फ़ाइल में लिखता है।
>>> data = b'Welcome to TutorialsPoint'
>>> obj = lzma.LZMAFile("test.xz", mode="wb")
>>> obj.write(data)
>>> obj.close()
कम्प्रेस्ड फ़ाइल को पढ़ा जाता है और 'rb' मोड पैरामीटर के साथ बनाए गए LZMAFile ऑब्जेक्ट के read() मेथड द्वारा अनकंप्रेस्ड डेटा पुनर्प्राप्त किया जाता है।
read()
यह मेथड कम्प्रेस्ड फ़ाइल से डेटा पढ़ता है और अनकंप्रेस्ड डेटा लौटाता है।
>>> obj = lzma.LZMAFile("test.xz", mode="rb")
>>> data = obj.read()
>>> data
b'Welcome to TutorialsPoint'
LZMA एल्गोरिदम पहले से खुली फ़ाइल में कम्प्रेस्ड डेटा लिखने की भी अनुमति देता है। निम्न उदाहरण में, 'test.txt' को सामान्य रूप से (बिल्ट-इन open() फ़ंक्शन का उपयोग करके) 'wb' मोड में खोला जाता है और कुछ टेक्स्ट इसमें लिखा जाता है। बाद में, उसी फ़ाइल का उपयोग कम्प्रेस्ड डेटा लिखने के लिए किया जाता है।
>>> f = open("test.txt", "wb")
>>> f.write(b"Hello world")
>>> fp = lzma.open(f, "wb")
>>> fp.write(b"Welcome to Python")
>>> f.write(b"Thank you")
>>> f.close()
>>> fp.flush()
>>> fp.close()
जब उपरोक्त कोड एक्ज़ीक्यूट होता है, तो 'test.txt' करंट डायरेक्टरी में दिखाई देता है। इसमें कम्प्रेस्ड और अनकंप्रेस्ड डेटा का मिश्रण होता है:
Hello worldý7zXZ æÖ´F!t/å£Thank you
bz2 मॉड्यूल की तरह, lzma मॉड्यूल में भी इन्क्रीमेंटल कम्प्रेसर और डीकम्प्रेसर क्लासेस हैं।
LZMACompressor()
यह एक कंस्ट्रक्टर है जो इन्क्रीमेंटल कम्प्रेसर ऑब्जेक्ट लौटाता है। कई चंक्स को व्यक्तिगत रूप से कम्प्रेस किया जा सकता है और उनका संयुक्त डेटा फ़ाइल में लिखा जाता है।
compress()
यह मेथड दिए गए डेटा को कम्प्रेस करता है और बाइट ऑब्जेक्ट लौटाता है।
flush()
यह मेथड बफ़र को खाली करता है और बाइट ऑब्जेक्ट लौटाता है।
निम्न उदाहरण इन्क्रीमेंटल कम्प्रेसर ऑब्जेक्ट का उपयोग करके लिस्ट ऑब्जेक्ट को कम्प्रेस करता है।
>>> data = [b'Hello World', b'How are you?', b'welcome to Python'] >>> obj = lzma.LZMACompressor() >>> bindata = [] >>> for i in data: ... bindata.append(obj.compress(i)) ... >>> bindata.append(obj.flush()) >>> bindata [b'\xfd7zXZ\x00\x00\x04\xe6\xd6\xb4F\x02\x00!\x01\x16\x00\x00\x00t/\xe5\xa3', b'', b'', b"\x01\x00'Hello WorldHow are you?welcome to Python\x00\xf5\xc6\xc1d|\xf3\x8ey\x00\x01@(\xd4RJ\xe5\x1f\xb6\xf3}\x01\x00\x00\x00\x00\x04YZ"]
उपरोक्त कोड bindata को मूल लिस्ट में प्रत्येक आइटम के कम्प्रेस्ड बाइट रिप्रेजेंटेशन्स की सूची के रूप में बनाता है। LZMADecompressor ऑब्जेक्ट का उपयोग करके अनकंप्रेस्ड डेटा पुनर्प्राप्त करने के लिए, निम्न स्टेटमेंट उपयोग करें:
>>> obj = lzma.LZMADecompressor() >>> binstr = b''.join(bindata) >>> obj.decompress(binstr) b'Hello WorldHow are you?welcome to Python'
इस लेख में lzma मॉड्यूल में क्लासेस और फ़ंक्शन्स की उदाहरणों के साथ व्याख्या की गई है।