2012-10-08 16 views
12

मैं पाइथन में ज़िप फ़ाइल में ZipFile पैकेज का उपयोग कर रहा हूं। यहां मेरा कोड है:पायथन में ज़िपफाइल का उपयोग करके मैं एक फ़्लैटेड निर्देशिका संरचना के साथ फ़ाइल कैसे ज़िप कर सकता हूं?

archive = zipfile.ZipFile(join(settings.ARCHIVES_DIR, 'test.zip'), "a") 

for pdffile in glob.glob(join(settings.IBILLING_DIR, '*.pdf')): 
    archive.write(pdffile) 

archive.close() 

मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि बनाई गई ज़िप फ़ाइल में निर्देशिका संरचना है। जो फ़ाइलें जोड़े गए हैं उन्हें पथ के साथ जोड़ा गया है जिसका अर्थ है कि जो उपयोगकर्ता संग्रह को निकालता है, वह भी निर्देशिका संरचना प्राप्त कर लेगा। मैं ज़िप में फ़ाइलों को जोड़ना चाहता हूं लेकिन बिना किसी निर्देशिका संरचना के।

मैं यह कैसे कर सकता हूं? मुझे यह जानकारी दस्तावेज़ों में नहीं मिली।

धन्यवाद

+0

ग्लोब के बजाय 'os.walk' का उपयोग करने का प्रयास करें? – wim

उत्तर

17

पहले

import os 

जोड़ने तो archive.write लाइन को संशोधित होने के लिए:

archive.write(pdffile, os.path.basename(pdffile)) 

यह निर्दिष्ट करता है कि प्रत्येक पीडीएफ एक पथ बराबर करने के साथ ज़िप फ़ाइल में लिखा जाना चाहिए केवल उस पथ का फ़ाइल नाम जिसे आप पढ़ रहे हैं (arcname parameter for the write() call निर्दिष्ट करके)।

नोट, हालांकि, इसका मतलब यह है कि यदि आपके पास अलग-अलग निर्देशिकाओं में एक ही नाम के साथ दो पीडीएफ फाइलें हैं, तो एक दूसरे को ओवरराइट कर देगा।

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

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