GZip অ্যাপ্লিকেশন ফাইল কম্প্রেস ও ডিকম্প্রেস করার জন্য ব্যবহৃত হয়। এটি GNU প্রকল্পের একটি অংশ। পাইথনের gzip মডিউল GZip অ্যাপ্লিকেশনের ইন্টারফেস। gzip ডেটা কম্প্রেশন অ্যালগরিদম নিজে zlib মডিউলের উপর ভিত্তি করে তৈরি।
gzip মডিউলে GzipFile ক্লাস এবং এর মেথডগুলোর সংজ্ঞা রয়েছে। এছাড়াও open(), compress() এবং decompress() gibi সুবিধাজনক ফাংশনও রয়েছে।
কম্প্রেশন ও ডিকম্প্রেশন অর্জনের সবচেয়ে সহজ উপায় হলো উপরে উল্লেখিত ফাংশনগুলো ব্যবহার করা।
open() ফাংশন
এই ফাংশনটি একটি gzip-কম্প্রেসড ফাইল বাইনারি বা টেক্সট মোডে খুলে একটি ফাইল-সদৃশ অবজেক্ট ফেরত দেয়, যা একটি ফিজিক্যাল ফাইল, স্ট্রিং বা বাইট অবজেক্ট হতে পারে। ডিফল্টভাবে ফাইলটি 'rb' মোডে খুলে (বাইনারি ডেটা পড়ার জন্য), তবে মোড প্যারামিটার নিচের মোডগুলো গ্রহণ করতে পারে:
বাইনারি মোড: 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', 'xb' টেক্সট মোড: 'rt', 'at', 'wt', 'xt'
এই ফাংশনটি কম্প্রেশন লেভেলও সংজ্ঞায়িত করে যার মান ০ থেকে ৯ পর্যন্ত হতে পারে। টেক্সট মোডে ফাইল খোলার সময় GzipFile অবজেক্টটি TextIOWrapper অবজেক্টে র্যাপ হয়ে যায়।
compress() ফাংশন
এই ফাংশনটি আর্গুমেন্ট হিসেবে দেওয়া ডেটার ওপর কম্প্রেশন প্রয়োগ করে কম্প্রেসড বাইট অবজেক্ট ফেরত দেয়। ডিফল্ট কম্প্রেশন লেভেল ৯।
decompress() ফাংশন
এই ফাংশনটি বাইট অবজেক্টটি ডিকম্প্রেস করে অনকম্প্রেসড ডেটা ফেরত দেয়।
নিচের উদাহরণটি কম্প্রেসড ডেটা লিখে একটি gzip ফাইল তৈরি করে:
>>> import gzip
>>> data = b'Python - Batteries included'
>>> with gzip.open("test.txt.gz", "wb") as f:
... f.write(data)
এটি করেন্ট ডিরেক্টরিতে "test.txt.gz" ফাইল তৈরি করবে। এই gzip আর্কাইভে "test.txt" থাকে যা যেকোনো আনজিপ ইউটিলিটি দিয়ে যাচাই করা যায়।
প্রোগ্রামেটিকভাবে এই কম্প্রেসড ফাইল পড়ার জন্য:
>>> with gzip.open("test.txt.gz", "rb") as f:
... data = f.read()
>>> data
b'Python - Batteries included'
এক্সিস্টিং ফাইলকে gzip আর্কাইভে কম্প্রেস করতে, ফাইল থেকে টেক্সট পড়ে সেটাকে bytearray-এ রূপান্তর করুন। তারপর এই bytearray অবজেক্টটি gzip ফাইলে লিখুন। নিচের উদাহরণে 'zen.txt' ফাইলটি করেন্ট ডিরেক্টরিতে আছে ধরে নেওয়া হয়েছে।
>>> fp = open("zen.txt", "rb")
>>> data = fp.read()
>>> bindata = bytearray(data)
>>> with gzip.open("zen.txt.gz", "wb") as f:
... f.write(bindata)
gzip আর্কাইভ থেকে অনকম্প্রেসড ফাইল পুনরুদ্ধার করতে:
>>> fp = open("zen1.txt", "wb")
>>> with gzip.open("zen.txt.gz", "rb") as f:
... bindata = f.read()
>>> fp.write(bindata)
>>> fp.close()
উপরোক্ত কোড করেন্ট ডিরেক্টরিতে 'zen1.txt' তৈরি করবে যাতে 'zen.txt'-এর মতো একই ডেটা থাকবে।
এই সুবিধাজনক ফাংশনগুলোর পাশাপাশি, gzip মডিউলে GzipFile ক্লাসও রয়েছে যা compress() ও decompress() মেথড সংজ্ঞায়িত করে। এই ক্লাসের কনস্ট্রাক্টর ফাইল, মোড ও কম্প্রেশন লেভেল আর্গুমেন্ট নেয়।
যখন মোড প্যারামিটার 'w', 'wb' বা 'wt' দেওয়া হয়, GzipFile অবজেক্ট write() মেথড প্রদান করে যাতে ডেটা কম্প্রেস করে gzip ফাইলে লেখা যায়।
>>> f = gzip.GzipFile("testnew.txt.gz", "wb")
>>> data = b'Python - Batteries included'
>>> f.write(data)
>>> f.close()
এটি testnew.txt.gz ফাইল তৈরি করবে। যেকোনো ইউটিলিটি দিয়ে আনজিপ করলে দেখতে পাবেন এতে testnew.txt আছে যার ভেতরে 'Python – Batteries included' টেক্সট রয়েছে।
GzipFile অবজেক্ট দিয়ে gzip ফাইল আনকম্প্রেস করতে, মোড প্যারামিটার 'rb' দিয়ে অবজেক্ট তৈরি করুন এবং read() মেথড দিয়ে অনকম্প্রেসড ডেটা পড়ুন।
>>> f = gzip.GzipFile("testnew.txt.gz", "rb")
>>> data = f.read()
>>> data
b'Python - Batteries included'
এই আর্টিকেলে আমরা শিখলাম কিভাবে পাইথনের gzip মডিউল দিয়ে gzip লাইব্রেরি ইমপ্লিমেন্ট করা যায়।