bzip2 फ़ाइलों के कम्प्रेशन और डीकम्प्रेशन के लिए एक ओपन सोर्स एल्गोरिदम है। Python का bz2 मॉड्यूल इस एल्गोरिदम को प्रोग्रामेटिक रूप से लागू करने की सुविधा प्रदान करता है।
open() फ़ंक्शन
यह फ़ंक्शन bzip2 कम्प्रेस्ड फ़ाइल को खोलता है और एक फ़ाइल ऑब्जेक्ट लौटाता है। फ़ाइल को बाइनरी/टेक्स्ट मोड में रीड/राइट परमिशन के साथ खोला जा सकता है। यह फ़ंक्शन compressionlevel आर्गुमेंट (1 से 9 के बीच) के आधार पर कम्प्रेशन करता है।
write() मेथड
जब फ़ाइल 'w' या 'wb' मोड में खोली जाती है, तो यह मेथड फ़ाइल ऑब्जेक्ट के लिए उपलब्ध होता है। बाइनरी मोड में, यह कम्प्रेस्ड बाइनरी डेटा फ़ाइल में लिखता है। सामान्य टेक्स्ट मोड में, फ़ाइल ऑब्जेक्ट एन्कोडिंग के लिए TextIOWrapper ऑब्जेक्ट में लपेटा जाता है।
read() - जब फ़ाइल रीड मोड में खोली जाती है, तो यह फ़ंक्शन उसे पढ़ता है और अनकम्प्रेस्ड डेटा लौटाता है।
निम्न कोड bzip2 फ़ाइल में कम्प्रेस्ड डेटा लिखता है:
>>> import bz2
>>> f = bz2.open("test.bz2", "wb")
>>> data = b'Welcome to TutorialsPoint'
>>> f.write(data)
>>> f.close()
यह करंट डायरेक्टरी में test.bz2 फ़ाइल बनाएगा। कोई भी अनजिपिंग टूल इसमें test फ़ाइल दिखाएगा। इस test.bz2 फ़ाइल से अनकम्प्रेस्ड डेटा पढ़ने के लिए:
>>> f = bz2.open("test.bz2", "rb")
>>> data = f.read()
>>> data
b'Welcome to TutorialsPoint'
bz2 मॉड्यूल BZ2File क्लास भी डिफाइन करता है। इसका ऑब्जेक्ट कंस्ट्रक्टर के mode पैरामीटर के आधार पर कंप्रेसर और डीकंप्रेसर दोनों की तरह काम करता है।
BZ2File() कंस्ट्रक्टर
open() फ़ंक्शन की तरह, इसमें file और mode पैरामीटर आवश्यक हैं। डिफ़ॉल्ट compressionlevel 9 है और यह 1 से 9 के बीच हो सकता है।
BZ2Compressor()
यह फ़ंक्शन इन्क्रीमेंटल कंप्रेसर क्लास का ऑब्जेक्ट लौटाता है। इस क्लास के compress() मेथड को प्रत्येक कॉल कम्प्रेस्ड डेटा का एक चंक लौटाता है। कई चंक्स को जोड़कर अंत में bzip2 कम्प्रेशन फ़ाइल में लिखा जा सकता है।
flush()
यह मेथड बफर को खाली करता है और उसमें मौजूद डेटा के चंक को कम्प्रेस्ड ऑब्जेक्ट में जोड़ने के लिए लौटाता है।
BZ2Decompressor()
यह फ़ंक्शन इन्क्रीमेंटल डीकंप्रेसर का ऑब्जेक्ट लौटाता है। फ्लश्ड डेटा के साथ डीकम्प्रेस्ड डेटा के इंडिविजुअल चंक्स को जोड़कर अनकम्प्रेस्ड डेटा बनता है।
निम्न उदाहरण लिस्ट ऑब्जेक्ट में प्रत्येक आइटम को पहले कम्प्रेस करता है और कन्कैटनेटेड बाइट ऑब्जेक्ट को फ़ाइल में लिखता है। डेटा BZ2Decompressor ऑब्जेक्ट द्वारा प्राप्त किया जाता है।
>>> import bz2
>>> data = [b'Hello World', b'How are you?', b'welcome to Python']
>>> obj = bz2.BZ2Compressor()
>>> f = bz2.open("test.bz2", "wb")
>>> d1 = obj.compress(data[0])
>>> d2 = obj.compress(data[1])
>>> d3 = obj.compress(data[2])
>>> d4 = obj.flush()
>>> compressedobj = d1 + d2 + d3 + d4
>>> f.write(compressedobj)
>>> f.close()
>>> obj = bz2.BZ2Decompressor()
>>> f = bz2.open("test.bz2", "rb")
>>> data = f.read()
>>> obj.decompress(data)
b'Hello WorldHow are you?welcome to Python'