2010-11-12 16 views
49

मैं एक छोटे से सहायक समारोह बना मेरी फ़ाइलों को संपीड़ित किया प्रतीत नहीं होता है! फाइलें एक ही आकार के हैं और प्रभावी ढंग से, एक्सटेंशन को ".zip" में बदल दिया जा रहा है (इस मामले में ".xls" से)।अजगर zipfile मॉड्यूल

मैं WinXP SP2 पर पायथन 2.5 चला रहा हूं।

उत्तर

103

ऐसा इसलिए है क्योंकि ZipFile आपको संपीड़न विधि निर्दिष्ट करने की आवश्यकता है। यदि आप इसे निर्दिष्ट नहीं करते हैं, तो यह संपीड़न विधि zipfile.ZIP_STORED होने लगता है, जो केवल उन्हें संपीड़ित किए बिना फ़ाइलों को संग्रहीत करता है। आपको zipfile.ZIP_DEFLATED होने की विधि निर्दिष्ट करने की आवश्यकता है। इसके लिए आपको zlib मॉड्यूल स्थापित करने की आवश्यकता होगी (यह आमतौर पर डिफ़ॉल्ट रूप से स्थापित है)।

import zipfile 

def main(archive_list=[],zfilename='default.zip'): 
    print zfilename 
    zout = zipfile.ZipFile(zfilename, "w", zipfile.ZIP_DEFLATED) # <--- this is the change you need to make 
    for fname in archive_list: 
     print "writing: ", fname 
     zout.write(fname) 
    zout.close() 

if __name__ == '__main__': 
    main() 
+15

क्या एक भयानक डिफ़ॉल्ट:

import shutil shutil.make_archive(file_name, 'zip', file location after compression) 

पर अधिक व्यापक प्रलेखन देख सकते हैं! क्यूं कर?! – gabe

+4

क्योंकि 'zlib' मॉड्यूल हमेशा उपलब्ध नहीं है, खासकर सैंडबॉक्स किए गए इंस्टॉलेशन में। –

+1

मैं ज़िप फ़ाइलों के साथ एक ही मुद्दे में भाग गया। मुझे यह मानना ​​है कि मेरी गलती पाइथन डॉक्स से उदाहरण कोड का प्रयास करने से पहले दस्तावेज़ीकरण नहीं पढ़ रही थी। मुझे लगता है कि उदाहरण कोड में इसे कम भ्रमित करने के लिए ZIP_DEFLATED पैरामीटर शामिल होना चाहिए। –

5

एक बहुत आसान तरीका एक 'zip file' प्रारूप संपीड़ित करने के लिए नहीं है, shutil.make_archive पुस्तकालय में

का प्रयोग करें।

उदाहरण के लिए: https://docs.python.org/2/library/shutil.html#shutil.make_archive

संबंधित मुद्दे