Lempel–Ziv–Markov chain algorithm (LZMA) একটি ডিকশনারি কমপ্রেশন স্কিম ব্যবহার করে লসলেস ডেটা কমপ্রেশন সম্পাদন করে যেটি অন্যান্য কমপ্রেশন অ্যালগরিদমের চেয়ে বেশি কমপ্রেশন রেশিও প্রদান করে। পাইথনের lzma মডিউল LZMA অ্যালগরিদমের সাথে ডেটা কমপ্রেশন এবং ডিকমপ্রেশনের জন্য ক্লাস এবং সুবিধাজনক ফাংশন নিয়ে গঠিত।
যদিও এই মডিউলের ফাংশনালিটি bz2 মডিউলের সাথে মিলত jul, LZMAFile ক্লাস BZ2File ক্লাসের চেয়ে থ্রেড-সেফ নয়।
এখানেও, lzma মডিউলের open() ফাংশন LZMA-কমপ্রেসড ফাইল অবজেক্ট খোলার সবচেয়ে সহজ উপায়।
open()
এই ফাংশন একটি LZMA-কমপ্রেসড ফাইল খোলে এবং একটি ফাইল অবজেক্ট রিটার্ন করে। ফাংশনটিকে দুটি প্রধান প্যারামিটার দরকার - ফাইল নাম এবং mode। mode প্যারামিটার ডিফল্টভাবে "rb" কিন্তু নিচের যেকোনো মান নিতে পারে:
বাইনারি মোড - "r", "rb", "w", "wb", "x", "xb", "a" or "ab" টেক্সট মোড - "rt", "wt", "xt", or "at"
compress()
এই ফাংশন দেওয়া ডেটাকে LZMA অ্যালগরিদম ব্যবহার করে কমপ্রেস করে এবং একটি বাইট অবজেক্ট রিটার্ন করে। এই ফাংশন অপশনালি একটি format আর্গুমেন্ট নিতে পারে যা কন্টেইনার ফরম্যাট নির্ধারণ করে। সম্ভাব্য মান 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
LZMAFile()
এটি LZMAFile ক্লাসের কনস্ট্রাক্টর। এটিকে ফাইল এবং mode স্পেসিফাই করতে হবে। 'w' বা 'wb' মোডের অবজেক্টে write() মেথড উপলব্ধ করে।
write()
এই মেথড দেওয়া ডেটা কমপ্রেস করে এবং এর নিচের ফাইলে লিখে।
>>> data = b'Welcome to TutorialsPoint'
>>> obj = lzma.LZMAFile("test.xz", mode="wb")
>>> obj.write(data)
>>> obj.close()
কমপ্রেসড ফাইলটি পড়ে আনকমপ্রেসড ডেটা mode='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 কে মূল লিস্টের প্রতিটি আইটেমের কমপ্রেসড বাইট রিপ্রেজেন্টেশনlardan oluşan একটি লিস্ট হিসেবে বিল্ড করে। LZMADecompressor অবজেক্ট ব্যবহার করে আনকমপ্রেসড ডেটা পুনরুদ্ধার করতে নিচের স্টেটমেন্ট ব্যবহার করুন:
>>> obj = lzma.LZMADecompressor() >>> binstr = b''.join(bindata) >>> obj.decompress(binstr) b'Hello WorldHow are you?welcome to Python'
এই আর্টিকেলে lzma মডিউলের ক্লাস এবং ফাংশনগুলো উদাহরণসহ ব্যাখ্যা করা হয়েছে।