کار با فایل های zip در پایتون
در این آموزش با ماژول 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
فعال است.
ارسال نظر