2015-12-14 6 views
5

पर फ़ाइल जोड़ना मैं पाइथन के zipfile मॉड्यूल का उपयोग कर रहा हूं।
एक ज़िप के रास्ते में स्थित फाइल करने के बाद:
/home/user/a/b/c/test.zip
और बनाया एक और फ़ाइल होने /home/user/a/b/c/1.txt तहत मैं मौजूदा ज़िप करने के लिए इस फ़ाइल को जोड़ना चाहते हैं, मैंने किया था:
zip = zipfile.ZipFile('/home/user/a/b/c/test.zip','a') zip.write('/home/user/a/b/c/1.txt') zip.close()मौजूदा ज़िपफाइल

और यह सब सबफ़ोल्डर मिला फ़ाइल को अनजिप करते समय पथ में दिखाई देता है, मैं पथ के उपफोल्डर के बिना ज़िप फ़ाइल कैसे दर्ज करूं?

मैंने यह भी कोशिश की: zip.write(os.path.basename('/home/user/a/b/c/1.txt')) और एक त्रुटि मिली है कि फ़ाइल मौजूद नहीं है, हालांकि यह करता है।

नोट: मैं इस उदाहरण में इसे सरल बनाने के लिए पथ में हार्डकोडेड मानों का उपयोग नहीं कर रहा हूं।

उत्तर

7

आप बहुत करीब हो गया है:

zip.write(path_to_file, os.path.basename(path_to_file)) 

आप के लिए चाल करना चाहिए।

स्पष्टीकरण: zip.write फ़ंक्शन एक दूसरा तर्क (arcname) स्वीकार करता है जो ज़िप संग्रह में संग्रहीत फ़ाइल नाम है, zipfile अधिक जानकारी के लिए दस्तावेज़ देखें।

os.path.basename() आपके लिए पथ में निर्देशिकाओं को बंद कर देता है, ताकि फ़ाइल को केवल इस नाम के अंतर्गत संग्रह में संग्रहीत किया जाएगा।

ध्यान दें कि यदि आप केवल zip.write(os.path.basename(path_to_file)) यह वर्तमान निर्देशिका में फ़ाइल को देखेंगे जहां यह (जैसा कि त्रुटि कहता है) मौजूद नहीं है।

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