ماژول zipfile کتابخانه استاندارد پایتون را می توان برای فشرده سازی فایل ها به ZIP و غیرفشرده سازی فایل های ZIP استفاده کرد. در کتابخانه استاندارد گنجانده شده است، بنابراین نیازی به نصب اضافی نیست.
مطالب زیر توضیح داده شده است.
- چند فایل را در یک فایل ZIP فشرده کنید
- یک فایل جدید به فایل ZIP موجود اضافه کنید
- یک پوشه (پوشه) را در یک فایل ZIP فشرده کنید
- در یک فایل ZIP با رمز عبور فشرده می شود
- محتویات فایل ZIP را بررسی کنید.
- کل محتویات فایل ZIP را استخراج (باز کردن بسته) کنید.
- محتویات فایل ZIP را انتخاب کرده و آن را استخراج کنید.
چند فایل را در یک فایل ZIP فشرده کنید
یک شی ZipFile ایجاد کنید و از متد write() برای اضافه کردن فایل هایی که می خواهید فشرده کنید استفاده کنید.
برای ایجاد یک فایل ZIP جدید، مسیر فایل ZIP ساخته شده را به عنوان اولین آرگومان سازنده شی ZipFile و آرگومان دوم را به صورت زیر مشخص کنید.w'
علاوه بر این، روش فشرده سازی را می توان به عنوان آرگومان سوم مشخص کرد.
zipfile.ZIP_STORED
:فقط چند فایل را بدون فشرده سازی ترکیب کنید (پیش فرض)zipfile.ZIP_DEFLATED
:فشرده سازی ZIP معمولی (ماژول zlib مورد نیاز است)zipfile.ZIP_BZIP2
:فشرده سازی BZIP2 (ماژول bz2 مورد نیاز است)zipfile.ZIP_LZMA
:فشرده سازی LZMA (ماژول lzma مورد نیاز است)
BZIP2 و LZMA نسبت فشرده سازی بالاتری دارند (می توان آنها را به اندازه کوچکتر فشرده کرد)، اما زمان مورد نیاز برای فشرده سازی طولانی تر است.
در متد write() فایلی با نام فایل آرگومان اول در فایل ZIP با نام آرگومان دوم نوشته می شود. اگر نام قوس حذف شده باشد، از نام فایل همانطور که هست استفاده می شود. arcname همچنین می تواند یک ساختار دایرکتوری را مشخص کند.
شی ZipFile باید با متد ()close بسته شود، اما اگر از دستور with استفاده کنید، پس از اتمام بلوک به طور خودکار بسته می شود.
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')
با تعیین آرگومان compress_type متد write() امکان انتخاب روش فشرده سازی برای هر فایل نیز وجود دارد.
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')
یک فایل جدید به فایل ZIP موجود اضافه کنید
برای افزودن یک فایل جدید به یک فایل فشرده موجود، هنگام ایجاد شی ZipFile، اولین آرگومان سازنده سازنده را روی مسیر فایل فشرده موجود قرار دهید. همچنین حالت آرگومان دوم را به صورت زیر تنظیم کنید.a'
سپس، مانند مثال بالا، فقط با استفاده از متد write() فایل را اضافه کنید.
with zipfile.ZipFile('data/temp/new_comp.zip', 'a') as existing_zip:
existing_zip.write('data/temp/test4.txt', arcname='test4.txt')
یک پوشه (پوشه) را در یک فایل ZIP فشرده کنید
اگر می خواهید یک دایرکتوری کامل (پوشه) را در یک فایل ZIP فشرده کنید، می توانید از os.scandir() یا os.listdir() برای ایجاد لیستی از فایل ها استفاده کنید، اما استفاده از make_archive() در shutil آسان تر است. مدول.
مقاله زیر را ببینید.
- مقالات مرتبط:فشرده سازی دایرکتوری (پوشه) به zip یا tar در پایتون
در یک فایل ZIP با رمز عبور فشرده می شود
ماژول zipfile به شما اجازه ایجاد ZIP های محافظت شده با رمز عبور را نمی دهد. اگر می خواهید یک فایل را به یک فایل فشرده محافظت شده با رمز عبور فشرده کنید، از کتابخانه شخص ثالث pyminizip استفاده کنید.
توجه داشته باشید که فشرده سازی ZIP های محافظت شده با رمز عبور را می توان با ماژول zipfile انجام داد (به زیر مراجعه کنید).
محتویات فایل ZIP را بررسی کنید.
می توانید محتویات یک فایل ZIP موجود را بررسی کنید.
با تنظیم اولین فایل آرگومان در سازنده در مسیر فایل zip موجود و حالت آرگومان دوم روی “r” یک شی ZipFile ایجاد کنید. آرگومان mode را می توان حذف کرد زیرا پیش فرض “r” است.
می توانید از متد namelist() شی ZipFile برای دریافت لیستی از فایل های آرشیو شده استفاده کنید.
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']
کل محتویات فایل ZIP را استخراج (باز کردن بسته) کنید.
برای باز کردن محتویات یک فایل ZIP، یک شی ZipFile با فایل آرگومان اول در سازنده به عنوان مسیر فایل ZIP موجود و حالت آرگومان دوم به عنوان ‘r’، مانند مثال بالا ایجاد کنید. آرگومان mode را می توان حذف کرد زیرا پیش فرض آن ‘r’ است.
متد ()extractall شی ZipFile کل محتویات فایل ZIP را استخراج می کند (از حالت فشرده خارج می کند). اولین آرگومان، مسیر، مسیر دایرکتوری برای استخراج را مشخص می کند. اگر حذف شود، فایل ها به دایرکتوری فعلی استخراج می شوند.
with zipfile.ZipFile('data/temp/new_comp.zip') as existing_zip:
existing_zip.extractall('data/temp/ext')
یک فایل ZIP با رمز عبور را می توان با تعیین رمز عبور به عنوان آرگومان pwd متد ()extractall استخراج کرد.
with zipfile.ZipFile('data/temp/new_comp_with_pass.zip') as pass_zip:
pass_zip.extractall('data/temp/ext_pass', pwd='password')
محتویات فایل ZIP را انتخاب کرده و آن را استخراج کنید.
اگر می خواهید فقط فایل های خاصی را باز کرده و استخراج کنید، از متد ()extract استفاده کنید.
اولین آرگومان متد ()extract نام فایلی است که باید استخراج شود و دومین آرگومان مسیر دایرکتوری برای استخراج است. اگر آرگومان مسیر حذف شود، فایل به دایرکتوری فعلی استخراج می شود. نام فایلی که باید استخراج شود باید مسیر دایرکتوری را در فایل ZIP در صورتی که در آنجا ذخیره میشود، داشته باشد.
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')