পাইথনে জিপ ফাইল কম্প্রেস এবং আনকম্প্রেস করার জন্য zipfile

ব্যবসায়

পাইথন স্ট্যান্ডার্ড লাইব্রেরির জিপফাইল মডিউল ফাইলগুলিকে জিপগুলিতে সংকুচিত করতে এবং জিপ ফাইলগুলিকে আনকম্প্রেস করতে ব্যবহার করা যেতে পারে। এটি স্ট্যান্ডার্ড লাইব্রেরিতে অন্তর্ভুক্ত করা হয়েছে, তাই কোনও অতিরিক্ত ইনস্টলেশনের প্রয়োজন নেই।

নিম্নলিখিত বিষয়বস্তু ব্যাখ্যা করা হয়.

  • একটি জিপ ফাইলে একাধিক ফাইল কম্প্রেস করুন
  • একটি বিদ্যমান জিপ ফাইলে একটি নতুন ফাইল যোগ করুন
  • একটি জিপ ফাইলে একটি ডিরেক্টরি (ফোল্ডার) সংকুচিত করুন
  • একটি পাসওয়ার্ড সহ একটি জিপ ফাইলে সংকুচিত
  • জিপ ফাইলের বিষয়বস্তু পরীক্ষা করুন।
  • জিপ ফাইলের সম্পূর্ণ বিষয়বস্তু বের করুন (আনপ্যাক করুন)।
  • জিপ ফাইলের বিষয়বস্তু নির্বাচন করুন এবং এটি নিষ্কাশন করুন।

একটি জিপ ফাইলে একাধিক ফাইল কম্প্রেস করুন

একটি ZipFile অবজেক্ট তৈরি করুন এবং আপনি যে ফাইলগুলি সংকুচিত করতে চান তা যুক্ত করতে write() পদ্ধতি ব্যবহার করুন।

একটি নতুন জিপ ফাইল তৈরি করতে, ZipFile অবজেক্টের কনস্ট্রাক্টরের প্রথম আর্গুমেন্ট এবং দ্বিতীয় আর্গুমেন্ট হিসাবে তৈরি করা ZIP ফাইলের পাথ নির্দিষ্ট করুনw'

উপরন্তু, কম্প্রেশন পদ্ধতি তৃতীয় যুক্তি হিসাবে নির্দিষ্ট করা যেতে পারে।

  • zipfile.ZIP_STORED:শুধু কম্প্রেশন ছাড়া একাধিক ফাইল একত্রিত করুন (ডিফল্ট)
  • zipfile.ZIP_DEFLATED:সাধারণ জিপ কম্প্রেশন (zlib মডিউল প্রয়োজন)
  • zipfile.ZIP_BZIP2:BZIP2 কম্প্রেশন (bz2 মডিউল প্রয়োজন)
  • zipfile.ZIP_LZMA:LZMA কম্প্রেশন (lzma মডিউল প্রয়োজন)

BZIP2 এবং LZMA এর কম্প্রেশন অনুপাত বেশি (ছোট আকারে সংকুচিত করা যেতে পারে), কিন্তু কম্প্রেশনের জন্য প্রয়োজনীয় সময় বেশি।

write() পদ্ধতিতে, প্রথম আর্গুমেন্ট ফাইলের নাম সহ ফাইলটি দ্বিতীয় আর্গুমেন্ট আর্কনেম সহ একটি ZIP ফাইলে লেখা হয়। যদি আর্কনেম বাদ দেওয়া হয়, ফাইলের নাম যেমন ব্যবহার করা হয়। arcname একটি ডিরেক্টরি কাঠামো নির্দিষ্ট করতে পারে।

ZipFile অবজেক্টটি close() পদ্ধতির সাথে বন্ধ করতে হবে, কিন্তু আপনি যদি বিবৃতি সহ ব্যবহার করেন তবে ব্লকটি শেষ হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে।

import zipfile

with zipfile.ZipFile('data/temp/new_comp.zip', 'w', compression=zipfile.ZIP_DEFLATED) as new_zip:
    new_zip.write('data/temp/test1.txt', arcname='test1.txt')
    new_zip.write('data/temp/test2.txt', arcname='zipdir/test2.txt')
    new_zip.write('data/temp/test3.txt', arcname='zipdir/sub_dir/test3.txt')

write() পদ্ধতির compress_type আর্গুমেন্ট উল্লেখ করে, প্রতিটি ফাইলের জন্য কম্প্রেশন পদ্ধতি নির্বাচন করাও সম্ভব।

with zipfile.ZipFile('data/temp/new_comp_single.zip', 'w') as new_zip:
    new_zip.write('data/temp/test1.txt', arcname='test1.txt', compress_type=zipfile.ZIP_DEFLATED)
    new_zip.write('data/temp/test2.txt', arcname='zipdir/test2.txt')
    new_zip.write('data/temp/test3.txt', arcname='zipdir/sub_dir/test3.txt')

একটি বিদ্যমান জিপ ফাইলে একটি নতুন ফাইল যোগ করুন

একটি বিদ্যমান জিপ ফাইলে একটি নতুন ফাইল যোগ করতে, ZipFile অবজেক্ট তৈরি করার সময় বিদ্যমান জিপ ফাইলের পাথে কনস্ট্রাক্টরের প্রথম আর্গুমেন্ট সেট করুন। এছাড়াও, নিচের মত দ্বিতীয় আর্গুমেন্ট মোড সেট করুন।a'

তারপর, উপরের উদাহরণের মতো, লিখুন() পদ্ধতি ব্যবহার করে ফাইলটি যোগ করুন।

with zipfile.ZipFile('data/temp/new_comp.zip', 'a') as existing_zip:
    existing_zip.write('data/temp/test4.txt', arcname='test4.txt')

একটি জিপ ফাইলে একটি ডিরেক্টরি (ফোল্ডার) সংকুচিত করুন

আপনি যদি একটি সম্পূর্ণ ডিরেক্টরি (ফোল্ডার) একটি একক জিপ ফাইলে সংকুচিত করতে চান, আপনি ফাইলগুলির একটি তালিকা তৈরি করতে os.scandir() বা os.listdir() ব্যবহার করতে পারেন, তবে shutil এ make_archive() ব্যবহার করা সহজ। মডিউল

নিম্নলিখিত নিবন্ধ দেখুন.

একটি পাসওয়ার্ড সহ একটি জিপ ফাইলে সংকুচিত

জিপফাইল মডিউল আপনাকে পাসওয়ার্ড-সুরক্ষিত জিপ তৈরি করার অনুমতি দেয় না। আপনি যদি একটি পাসওয়ার্ড সুরক্ষিত জিপ ফাইলে একটি ফাইল সংকুচিত করতে চান তবে তৃতীয় পক্ষের লাইব্রেরি পাইমিনিজিপ ব্যবহার করুন।

মনে রাখবেন যে পাসওয়ার্ড-সুরক্ষিত জিপগুলির ডিকম্প্রেশন জিপফাইল মডিউল দিয়ে করা যেতে পারে (নীচে দেখুন)।

জিপ ফাইলের বিষয়বস্তু পরীক্ষা করুন।

আপনি একটি বিদ্যমান জিপ ফাইলের বিষয়বস্তু পরীক্ষা করতে পারেন।

কন্সট্রাক্টরে প্রথম আর্গুমেন্ট ফাইলটিকে বিদ্যমান জিপ ফাইলের পাথে এবং দ্বিতীয় আর্গুমেন্ট মোডটিকে ‘r’-এ সেট করে একটি ZipFile অবজেক্ট তৈরি করুন। মোড আর্গুমেন্ট বাদ দেওয়া যেতে পারে যেহেতু ডিফল্ট ‘r’।

আপনি সংরক্ষণাগারভুক্ত ফাইলগুলির একটি তালিকা পেতে ZipFile অবজেক্টের namelist() পদ্ধতি ব্যবহার করতে পারেন।

with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
    print(existing_zip.namelist())
# ['test1.txt', 'zipdir/test2.txt', 'zipdir/sub_dir/test3.txt', 'test4.txt']

জিপ ফাইলের সম্পূর্ণ বিষয়বস্তু বের করুন (আনপ্যাক করুন)।

একটি জিপ ফাইলের বিষয়বস্তু আনপ্যাক করতে, উপরের উদাহরণের মতো, বিদ্যমান জিপ ফাইলের পাথ হিসাবে কন্সট্রাক্টরে প্রথম আর্গুমেন্ট ফাইল এবং দ্বিতীয় আর্গুমেন্ট মোডটি ‘r’ হিসাবে একটি ZipFile অবজেক্ট তৈরি করুন। মোড আর্গুমেন্ট বাদ দেওয়া যেতে পারে যেহেতু এটি ডিফল্ট ‘r’।

ZipFile অবজেক্টের extractall() পদ্ধতি জিপ ফাইলের সম্পূর্ণ বিষয়বস্তু নিষ্কাশন করে (আনকপ্রেস করে)। প্রথম আর্গুমেন্ট, পাথ, এক্সট্রাক্ট করার জন্য ডিরেক্টরির পাথ নির্দিষ্ট করে। যদি এটি বাদ দেওয়া হয়, ফাইলগুলি বর্তমান ডিরেক্টরিতে বের করা হবে।

with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
    existing_zip.extractall('data/temp/ext')

extractall() পদ্ধতির আর্গুমেন্ট pwd হিসাবে পাসওয়ার্ড উল্লেখ করে পাসওয়ার্ড সহ একটি ZIP ফাইল বের করা যেতে পারে।

with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
    pass_zip.extractall('data/temp/ext_pass', pwd='password')

জিপ ফাইলের বিষয়বস্তু নির্বাচন করুন এবং এটি নিষ্কাশন করুন।

আপনি যদি শুধুমাত্র কিছু ফাইল আনপ্যাক এবং এক্সট্রাক্ট করতে চান তবে extract() পদ্ধতি ব্যবহার করুন।

extract() পদ্ধতির প্রথম আর্গুমেন্ট হল এক্সট্রাক্ট করা ফাইলের নাম, এবং দ্বিতীয় আর্গুমেন্ট পাথ হল ডিরেক্টরীর পাথ যা এক্সট্রাক্ট করতে হবে। যদি পাথ আর্গুমেন্ট বাদ দেওয়া হয়, ফাইলটি বর্তমান ডিরেক্টরিতে বের করা হবে। এক্সট্রাক্ট করা ফাইলের নাম জিপ ফাইলের ডিরেক্টরির পাথ অন্তর্ভুক্ত করা উচিত যদি এটি সেখানে সংরক্ষণ করা হয়।

with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
    existing_zip.extract('test1.txt', 'data/temp/ext2')

extractall() পদ্ধতির মতো, extract() পদ্ধতিটি আপনাকে আর্গুমেন্ট pwd হিসাবে একটি পাসওয়ার্ড নির্দিষ্ট করার অনুমতি দেয়।

with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
    pass_zip.extract('test1.txt', 'data/temp/ext_pass2', pwd='password')