کار با فایل های zip در پایتون

امیرحسین بیگدلو July 2025

در این آموزش با ماژول ZipFile پایتون آشنا خواهید که برای کار با فایل های zip استفاده میشود. فرمت Zip یک استاندارد برای آرشیو و فشرده سازی فایل ها بدون از دست دادن اطلاعات است. از ماژول zipfile پایتون میتوانید برای خواندن، ساختن، اضافه کردن و لیست کردن داده های فایل zip استفاده کنید. این ماژول از روش های مختلف فشرده سازی مانند ZIP_DEFLATED و ZIP_BZIP2 پشتیبانی میکند. ماژول zipfile بخشی از کتابخانه استاندارد پایتون است و بدون نیاز به نصب با دستور زیر میتوانید آن را استفاده کنید:

import zipfile

دوره پیشنهادی: دوره آموزش پروژه محور پایتون

# ایجاد کردن فایل zip

برای ایجاد کردن یک فایل zip در پایتون میتوانید از کلاس ZipFile استفاده کنید:

myzip = zipfile.ZipFile("test.zip", "w")
myzip.close()

در کد بالا یک آبجکت از کلاس ZipFile ایجاد کردیم. در آرگومان اول نام فایلی که میخواهیم ایجاد کنیم به همراه پسوند مشخص شده و در آرگومان دوم حالت باز شدن فایل است که w به معنی نوشتن و r به معنی خواندن اطلاعات است. در انتها برای آزاد شدن منابعی که فایل در اختیار دارد، از متد close استفاده کردیم.

فراخوانی متد close برای بستن فایل معمولا توسط برنامه نویسان فراموش میشود به این دلیل پیشنهاد میشود از context manager برای باز کردن فایل zip استفاده کنید:

with zipfile.ZipFile("text.zip", "w") as myzip:
    ...

در این حالت دیگر نیازی به فراخوانی متد close ندارید. بعد از باز کردن یک فایل zip میتوانید با متد write فایل هایی که میخواهید را داخل آن ذخیره کنید:

with zipfile.ZipFile("text.zip", "w") as myzip:
    myzip.write("image.jpg")

فقط کافیست آدرس فایلی که میخواهید در zip ذخیره کنید را به متد write ارسال کنید.

ویدیو پیشنهادی: کار با فایل در پایتون

# خواندن فایل zip

برای اینکه خواندن اطلاعات فایل های zip در پایتون میتوانید از همان کلاس ZipFile استفاده کنید اما اینبار باید فایل را در حالت r باز کنید:

with zipfile.ZipFile("text.zip", "r") as myzip:
    print(myzip.namelist())

در تکه کد بالا ابتدا فایل را در حالت خواندن باز کرده و سپس با متد namelist لیست فایل هایی که در zip وجود دارد را نمایش میدهیم.

برای خارج کردن تمام اطلاعات در داخل zip میتوانید از متد extractall استفاده کنید. در این حالت تمام فایل هایی که در فایل زیپ هستند در مسیری که مشخص میکنید استخراج خواهند شد:

with zipfile.ZipFile("text.zip", "w") as myzip:
    myzip.extractall("path/to/extract")

در صورتی که فایل zip حجم زیادی داشته باشد و نخواهید تمام فایل های آن را استخراج کنید، میتوانید با متد extract فقط فایل هایی که به آن احتیاج دارید را استخراج کنید:

with zipfile.ZipFile("text.zip", "w") as myzip:
    myzip.extract("file.name")

ویدیو پیشنهادی: مدیریت خطا با try و except در پایتون

# خطاهای فایل zip

در ماژول zipfile پایتون دو استثنا (exception) وجود دارد که در زمان کار با فایل های zip ممکن است با آنها مواجه شوید. خطای اول BadZipFile است که اگر فایل زیپی که میخواهید با آن کار کنید مشکل داشته باشد اجرا خواهد شد. خطای دوم LargeZipFile است که اگر حجم فایلی که با آن کار میکنید بیشتر از 4GB باشد اجرا خواهد شد. برای کار با فایل هایی با حجم بالا باید ZIP64 را فعال کنید.

دقت کنید که ویژگی ZIP64 به شکل پیشفرض در کلاس ZipFile فعال است و آن را غیر فعال نکنید:

zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True, metadata_encoding=None)

در کلاس بالا، آرگومان allowZip64 به شکل پیشفرض مقدار True دارد به این معنی که ZIP64 فعال است.

ویدیوهای مشابه



ارسال نظر


فعلا نظری برای نمایش وجود ندارد
مونگارد