পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতে zipfile নামে একটি মডিউল রয়েছে। এই মডিউল ব্যবহার করে আমরা জিপ ফাইলে বিভিন্ন অপারেশন করতে পারি।
জিপ ফাইলগুলো আর্কাইভ ফাইল ফরম্যাট। জিপ ফাইল লস-লেস ডেটা কম্প্রেশন ফিচারের জন্য ব্যবহৃত হয়, যাতে কম্প্রেসড ফর্ম থেকে এটি পুরোপুরি রিকনস্ট্রাক্ট করা যায়। একটি জিপ ফাইল এক বা একাধিক কম্প্রেসড ফাইল ধারণ করতে পারে।
জিপ ফাইলগুলোর ভালো ফিচারগুলো হলো, এটি স্টোরেজ রিকোয়ারমেন্ট কমায়, এবং স্ট্যান্ডার্ড কানেকশনের ওপর ট্রান্সফার স্পিড বাড়ায়।
পাইথনে zipfile মডিউল ইম্পোর্ট করতে হয় জিপ ফাইল ব্যবহার করতে।
from zipfile import ZipFile
প্রথমে দেখব কিভাবে একটি ডিরেক্টরি থেকে জিপ ফাইল তৈরি করা যায়। এই কেসে, মেইন ডিরেক্টরি একটি ফাইল এবং কিছু অন্য ডিরেক্টরি ধারণ করে।
তো প্রথমে, পুরো ডিরেক্টরি ক্রল করে সব ফাইল ও ফোল্ডার পেতে হবে এবং পাথগুলো লিস্ট হিসেবে সংরক্ষণ করতে হবে। তারপর জিপ ফাইলটি রাইট মোডে খুলে, সংরক্ষিত পাথগুলো থেকে সবকিছু লিখতে হবে।
উদাহরণ কোড
# ডিরেক্টরি ও সাবডিরেক্টরি থেকে সব ফাইল পেয়ে জিপে রূপান্তর
from zipfile import ZipFile
import os
def get_all_files(directory):
# ডিরেক্টরি থেকে সব ফাইল পাওয়ার ফাংশন
paths = []
for root, dirs, files in os.walk(directory):
for f_name in files:
path = os.path.join(root, f_name) # একটি ফাইল পেয়ে পুরো পাথ যোগ করুন
paths.append(path)
return paths # ফাইল পাথগুলো ফেরত দিন
directory = './sample_files'
paths = get_all_files(directory)
# ফাইলনেমগুলো প্রদর্শন করুন
print('The following files will be stored in the zip file')
for file in paths:
print(file)
# জিপ ফাইলটি রাইট মোডে খোলুন জিপ তৈরি করতে
with ZipFile('my_files.zip', 'w') as zf:
for file in paths:
zf.write(file)
print('Zip is created Successfully')
আউটপুট
The following files will be stored in the zip file ./sample_files\TP_python_prev.pdf ./sample_files\text_files\file1.txt ./sample_files\text_files\file2.txt Zip is created Successfully
এখন দেখব, zipfile মডিউল ব্যবহার করে জিপ ফাইল এক্সট্র্যাক্ট করার পদ্ধতি। জিপ এক্সট্র্যাক্ট করতে, প্রথমে জিপ ফাইলটি read মোডে খুলতে হবে, তারপর extract() বা extractall() মেথড ব্যবহার করে কন্টেন্ট এক্সট্র্যাক্ট করতে হবে। extract() মেথড জিপ ফাইল থেকে ফাইল লোকেট করার জন্য একটি পাথ নেয়।
উদাহরণ কোড
# জিপ ফাইল এক্সট্র্যাক্ট করা
from zipfile import ZipFile
zip_file = 'my_files.zip'
with ZipFile(zip_file, 'r') as zf:
# জিপের ভিতরের ফাইলগুলো প্রদর্শন
zf.printdir()
# জিপ ফাইল থেকে ফাইল এক্সট্র্যাক্ট করা
zf.extractall()
print('Zip Extraction Completed')
আউটপুট
File Name Modified Size sample_files/TP_python_prev.pdf 2018-10-19 13:19:48 1915882 sample_files/text_files/file1.txt 2018-11-06 13:34:46 22 sample_files/text_files/file2.txt 2018-11-06 13:35:02 24 Zip Extraction Completed
এখন, zipfile মডিউলের infolist() মেথড নিয়ে আলোচনা করব। এটি ফাইলনেম, মডিফিকেশন ডেট, ফাইল সাইজ ইত্যাদি ভিন্ন ইনফরমেশনয়ের একটি লিস্ট প্রদান করে।
উদাহরণ কোড
# জিপ ফাইল সম্পর্কে ইনফরমেশন পাওয়া
from zipfile import ZipFile
import datetime
zip_file = 'my_files.zip'
with ZipFile(zip_file, 'r') as zf:
for detail in zf.infolist():
print('File Name: ' + detail.filename)
print('\tModify Date: ' + str(datetime.datetime(*detail.date_time)))
print('\tZip Version: ' + str(detail.create_version))
print('\tSystem Version: ' + str(detail.create_system)) # 0 for windows
print('\tFile Size (Bytes): ' + str(detail.file_size))
আউটপুট
File Name: sample_files/TP_python_prev.pdf
Modify Date: 2018-10-19 13:19:48
Zip Version: 20
System Version: 0
File Size (Bytes): 1915882
File Name: sample_files/text_files/file1.txt
Modify Date: 2018-11-06 13:34:46
Zip Version: 20
System Version: 0
File Size (Bytes): 22
File Name: sample_files/text_files/file2.txt
Modify Date: 2018-11-06 13:35:02
Zip Version: 20
System Version: 0
File Size (Bytes): 24