কম্পিউটার টিউটোরিয়াল

পাইথনে ZIP আর্কাইভ নিয়ে কাজ (zipfile)

ZIP আর্কাইভিং এবং কমপ্রেশনের জন্য সবচেয়ে জনপ্রিয় ফাইল ফরম্যাটের একটি। এটি MSDOS এবং PC-এর যুগ থেকে ব্যবহৃত হচ্ছে এবং বিখ্যাত PKZIP অ্যাপ্লিকেশন tarafından ব্যবহৃত হয়েছে।

পাইথনের স্ট্যান্ডার্ড লাইব্রেরির zipfile মডিউল ক্লাসগুলো প্রদান করে যা ZIP আর্কাইভ তৈরি, এক্সট্র্যাক্ট, পড়া এবং লেখার জন্য টুলস সুবিধা দেয়।

ZipFile()

এই ফাংশন একটি ফাইল প্যারামিটার থেকে ZipFile অবজেক্ট রিটার্ন করে যা একটি স্ট্রিং বা বিল্ট-ইন open() ফাংশন দ্বারা তৈরি ফাইল অবজেক্ট হতে পারে। ফাংশনটিকে একটি mode প্যারামিটার দরকার যার ডিফল্ট মান 'r' যদিও এটি 'w' বা 'a' মান নিতে পারে আর্কাইভকে রিড, রাইট বা অ্যাপেন্ড মোডে খোলার জন্য।

আর্কাইভ ডিফল্টভাবে আনকমপ্রেসড। কমপ্রেশন অ্যালগরিদমের টাইপ স্পেসিফাই করতে, এক কনস্ট্যান্ট compression প্যারামিটারে অ্যাসাইন করতে হয়।

zipfile.ZIP_STORED আনকমপ্রেসড আর্কাইভ মেম্বারের জন্য।
zipfile.ZIP_DEFLATED সাধারণ ZIP কমপ্রেশন মেথডের জন্য। এটি zlib মডিউল প্রয়োজন।
zipfile.ZIP_BZIP2 BZIP2 কমপ্রেশন মেথডের জন্য। এটি bz2 মডিউল প্রয়োজন।
zipfile.ZIP_LZMA LZMA কমপ্রেশন মেথডের জন্য। এটি lzma মডিউল প্রয়োজন।

ZipFile অবজেক্ট নিচের মেথডগুলো ব্যবহার করে:

write()

এই মেথড দেওয়া ফাইলটি ZipFile অবজেক্ট দ্বারা রিপ্রেজেন্টেড আর্কাইভে যোগ করে।

>>> import zipfile
>>> newzip = zipfile.ZipFile('newdir/newzip.zip', 'w')
>>> newzip.write('zen.txt')
>>> newzip.close()

একটি ইতিমধ্যে বিদ্যমান আর্কাইভে অতিরিক্ত ফাইল যোগ করা যায় এটি অ্যাপেন্ড মোডে ('a' মোড হিসেবে) খুলে।

>>> newzip = zipfile.ZipFile('newdir/newzip.zip', 'a')
>>> newzip.write('zen.txt')
>>> newzip.close()

read()

এই মেথড আর্কাইভের একটি নির্দিষ্ট ফাইল থেকে ডেটা পড়ে।

>>> newzip = zipfile.ZipFile('newdir/newzip.zip', 'r')
>>> data = newzip.read('json.txt')
>>> data
b'["Rakesh", {"marks": [50, 60, 70]}]'

printdir()

এই মেথড দেওয়া আর্কাইভের সকল ফাইল লিস্ট করে।

>>> newzip.printdir()
File Name                    Modified             Size
json.txt                     2018-11-27 17:04:40  35
zen.txt                      2018-11-25 23:13:44  878

extract()

এই মেথড আর্কাইভ থেকে একটি নির্দিষ্ট ফাইল এক্সট্র্যাক্ট করে ডিফল্টভাবে করেন্ট ডিরেক্টরিতে বা দ্বিতীয় প্যারামিটার হিসেবে দেওয়া একটি ডিরেক্টরিতে।

>>> newzip.extract('json.txt', 'newdir')
'newdir\\json.txt'

extractall()

এই মেথড আর্কাইভের সকল ফাইল ডিফল্টভাবে করেন্ট ডিরেক্টরিতে এক্সট্র্যাক্ট করে। প্রয়োজনে বিকল্প ডিরেক্টরি প্যারামিটার হিসেবে স্পেসিফাই করুন।

>>> newzip.extractall('newdir')

getinfo()

এই মেথড দেওয়া ফাইলের জন্য ZipInfo অবজেক্ট রিটার্ন করে। ZipInfo অবজেক্ট ফাইলের ভিন্ন মেটাডেটা ইনফরমেশন ধারণ করে।

নিচের কোড আর্কাইভ থেকে 'zen.txt'-এর ZipInfo অবজেক্ট পায় এবং সেটি থেকে ফাইলনেম, সাইজ এবং ডেট-টাইম ইনফরমেশন রিট্রিভ করে।

>>> inf = newzip.getinfo('zen.txt')
>>> inf.filename, inf.file_size, inf.date_time
('zen.txt', 878, (2018, 11, 25, 23, 13, 45))

infolist()

এই মেথড আর্কাইভের সকল ফাইলের ZipInfo অবজেক্টের একটি লিস্ট রিটার্ন করে।

>>> newzip.infolist()
[, ]

উল্লেখ্য如前, আর্কাইভ কনস্ট্রাক্ট করার সময় প্রয়োগযোগ্য কমপ্রেশন অ্যালগরিদম compression প্যারামিটারে স্পেসিফাই করা হয়। নিচের কোডে, ZIP_DEFLATED কনস্ট্যান্ট zlib কমপ্রেশন ব্যবহার করে আর্কাইভ বিল্ড করে।

>>> zipobj = zipfile.ZipFile('txtzip.zip', mode='w', compression=zipfile.ZIP_DEFLATED)
>>> files = glob.glob("*.txt")
>>> for file in files:
        zipobj.write(file)
>>> zipobj.close()

namelist()

ZipFile অবজেক্টের এই মেথড আর্কাইভের সকল ফাইলের একটি লিস্ট রিটার্ন করে।

>>> zipobj = zipfile.ZipFile('txtzip.zip', mode='r')
>>> zipobj.namelist()
['a!.txt', 'data().txt', 'dict.txt', 'json.txt', 'LICENSE.txt', 'lines.txt', 'msg.txt', 'NEWS.txt', 'test.txt/', 'zen.txt', 'zen1.txt', 'zenbak.txt']

setpassword()

এই মেথড পাসওয়ার্ড প্যারামিটার সেট করে যা আর্কাইভ এক্সট্র্যাক্ট করার সময় প্রদান করতে হবে।

PyZipFile()

zipfile মডিউলের এই ফাংশন PyZipFile অবজেক্ট রিটার্ন করে। PyZipFile অবজেক্ট .py এক্সটেনশনযুক্ত ফাইল ধারণকারী একটি মডিউল কনস্ট্রাক্ট করতে পারে। এই আর্কাইভকে sys.path এনভায়রনমেন্ট ভেরিয়েবলে যোগ করা যাতে মডিউলটি zipimport মডিউল ব্যবহার করে ইম্পোর্ট করা যায়।

writepy() মেথড একটি .py ফাইল আর্কাইভে যোগ করে সংশ্লিষ্ট .pyc ফাইলে কম্পাইল করার পর।

files = glob.glob("*.py")
>>> pyzipobj = zipfile.PyZipFile('pyfiles/pyzip.zip', mode='w', compression=zipfile.ZIP_LZMA)
>>> for file in files:
        pyzipobj.writepy(file)
>>> pyzipobj.close()

এই আর্টিকেলে zipfile মডিউলের ক্লাস এবং ফাংশনগুলো আলোচনা করা হয়েছে।

  1. পাইথন - N-এর সাথে K দূরত্বের উপাদান সরানো

  2. Bokeh (Python)-এ ইমেজ নিয়ে কাজ করার পদ্ধতি

  3. টেনসরফ্লো এবং পাইথনে ক্যারেক্টার সাবস্ট্রিং নিয়ে কাজ করার পদ্ধতি

  4. পাইথন PyGame: উইন্ডোতে ইমেজ (Image) লোড ও প্রদর্শন করুন