zipfile Python में ज़िप फ़ाइलों को संपीड़ित और असम्पीडित करने के लिए

व्यापार

पायथन मानक पुस्तकालय के ज़िपफाइल मॉड्यूल का उपयोग फ़ाइलों को ज़िप में संपीड़ित करने और ज़िप फ़ाइलों को असम्पीडित करने के लिए किया जा सकता है। यह मानक पुस्तकालय में शामिल है, इसलिए किसी अतिरिक्त स्थापना की आवश्यकता नहीं है।

निम्नलिखित सामग्री की व्याख्या की गई है।

  • एक ज़िप फ़ाइल में एकाधिक फ़ाइलों को संपीड़ित करें
  • मौजूदा ज़िप फ़ाइल में एक नई फ़ाइल जोड़ें
  • एक निर्देशिका (फ़ोल्डर) को एक ज़िप फ़ाइल में संपीड़ित करें
  • एक पासवर्ड के साथ एक ज़िप फ़ाइल में संपीड़ित
  • ज़िप फ़ाइल की सामग्री की जाँच करें।
  • ज़िप फ़ाइल की संपूर्ण सामग्री को निकालें (अनपैक करें)।
  • ज़िप फ़ाइल की सामग्री का चयन करें और इसे निकालें।

एक ज़िप फ़ाइल में एकाधिक फ़ाइलों को संपीड़ित करें

एक ZipFile ऑब्जेक्ट बनाएं और उन फ़ाइलों को जोड़ने के लिए लिखें () विधि का उपयोग करें जिन्हें आप संपीड़ित करना चाहते हैं।

एक नई ज़िप फ़ाइल बनाने के लिए, ज़िप फ़ाइल के निर्माता के पहले तर्क के रूप में बनाई जाने वाली ज़िप फ़ाइल का पथ निर्दिष्ट करें, और दूसरा तर्क निम्नानुसार हैw'

इसके अलावा, संपीड़न विधि को तीसरे तर्क के रूप में निर्दिष्ट किया जा सकता है।

  • zipfile.ZIP_STORED:संपीड़न के बिना बस एकाधिक फ़ाइलों को संयोजित करें (डिफ़ॉल्ट)
  • zipfile.ZIP_DEFLATED:सामान्य ज़िप संपीड़न (ज़्लिब मॉड्यूल आवश्यक)
  • zipfile.ZIP_BZIP2:BZIP2 संपीड़न (bz2 मॉड्यूल आवश्यक)
  • zipfile.ZIP_LZMA:LZMA संपीड़न (lzma मॉड्यूल आवश्यक)

BZIP2 और LZMA में उच्च संपीड़न अनुपात होता है (छोटे आकार में संपीड़ित किया जा सकता है), लेकिन संपीड़न के लिए आवश्यक समय लंबा होता है।

राइट () विधि में, पहले तर्क फ़ाइल नाम वाली फ़ाइल को दूसरे तर्क आर्कनाम के साथ एक ज़िप फ़ाइल में लिखा जाता है। यदि आर्कनाम को छोड़ दिया जाता है, तो फ़ाइल नाम का उपयोग इस रूप में किया जाता है। आर्कनाम एक निर्देशिका संरचना भी निर्दिष्ट कर सकता है।

ZipFile ऑब्जेक्ट को क्लोज़ () विधि के साथ बंद करने की आवश्यकता है, लेकिन यदि आप कथन के साथ का उपयोग करते हैं, तो ब्लॉक समाप्त होने पर यह स्वचालित रूप से बंद हो जाएगा।

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 तर्क को निर्दिष्ट करके, प्रत्येक फ़ाइल के लिए संपीड़न विधि का चयन करना भी संभव है।

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() का उपयोग कर सकते हैं, लेकिन शटिल में make_archive() का उपयोग करना आसान है मापांक।

निम्नलिखित लेख देखें।

एक पासवर्ड के साथ एक ज़िप फ़ाइल में संपीड़ित

ज़िपफाइल मॉड्यूल आपको पासवर्ड से सुरक्षित ज़िप बनाने की अनुमति नहीं देता है। यदि आप किसी फ़ाइल को पासवर्ड से सुरक्षित ज़िप फ़ाइल में संपीड़ित करना चाहते हैं, तो तृतीय पक्ष लाइब्रेरी pyminizip का उपयोग करें।

ध्यान दें कि पासवर्ड से सुरक्षित ज़िप का डीकंप्रेसन ज़िपफाइल मॉड्यूल (नीचे देखें) के साथ किया जा सकता है।

ज़िप फ़ाइल की सामग्री की जाँच करें।

आप मौजूदा ज़िप फ़ाइल की सामग्री की जांच कर सकते हैं।

कंस्ट्रक्टर में पहली तर्क फ़ाइल को मौजूदा ज़िप फ़ाइल के पथ पर और दूसरे तर्क मोड को ‘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']

ज़िप फ़ाइल की संपूर्ण सामग्री को निकालें (अनपैक करें)।

एक ज़िप फ़ाइल की सामग्री को अनपैक करने के लिए, मौजूदा ज़िप फ़ाइल के पथ के रूप में कंस्ट्रक्टर में पहली तर्क फ़ाइल के साथ एक ZipFile ऑब्जेक्ट बनाएं और दूसरा तर्क मोड ‘r’ के रूप में, जैसा कि ऊपर के उदाहरण में है। मोड तर्क को छोड़ा जा सकता है क्योंकि यह डिफ़ॉल्ट रूप से ‘r’ है।

ZipFile ऑब्जेक्ट की एक्स्ट्रेक्टॉल () विधि ज़िप फ़ाइल की संपूर्ण सामग्री को निकालती है (असंपीड़ित करती है)। पहला तर्क, पथ, निकालने के लिए निर्देशिका का पथ निर्दिष्ट करता है। यदि इसे छोड़ दिया जाता है, तो फ़ाइलें वर्तमान निर्देशिका में निकाली जाएंगी।

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

पासवर्ड के साथ एक ज़िप फ़ाइल को पासवर्ड को Extractall () विधि के तर्क pwd के रूप में निर्दिष्ट करके निकाला जा सकता है।

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

ज़िप फ़ाइल की सामग्री का चयन करें और इसे निकालें।

यदि आप केवल कुछ फ़ाइलों को खोलना और निकालना चाहते हैं, तो निकालें () विधि का उपयोग करें।

निकालने () विधि का पहला तर्क निकालने के लिए फ़ाइल का नाम है, और दूसरा तर्क पथ निकालने के लिए निर्देशिका का पथ है। यदि पथ तर्क छोड़ा जाता है, तो फ़ाइल को वर्तमान निर्देशिका में निकाला जाएगा। निकाली जाने वाली फ़ाइल के नाम में ज़िप फ़ाइल में निर्देशिका का पथ शामिल होना चाहिए यदि वह वहां संग्रहीत है।

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')