2010-12-03 27 views
7

मुझे पता है कि पाइथन का उपयोग करके ज़िप संग्रह निकालने का तरीका है, लेकिन मैं प्रतिशत में उस निष्कर्षण की प्रगति को कैसे प्रदर्शित करूं?पाइथन का उपयोग करके ज़िपफाइल निकालें, प्रगति प्रतिशत प्रदर्शित करें?

+0

क्या आप जिस ग्राफिक्स ढांचे का उपयोग करने की योजना बना रहे हैं? –

+0

टिंकर, अगर आप इसके बारे में क्या बात करते हैं। मुझे केवल टेक्स्ट प्रतिशत प्रदर्शित करने में सक्षम होना चाहिए। –

+1

एक अलग प्रक्रिया में निष्कर्षण निकालने के लिए कुछ हद तक गंदे कामकाज है, मुख्य धागे से निकाली जा रही फ़ाइलों की निगरानी करें, उनके आकार और 'ZipInfo.file_size' – Novikov

उत्तर

6

निकालने का तरीका इसके लिए कॉल वापस नहीं प्रदान करता है इसलिए ई को असंपीड़ित आकार प्राप्त करने के लिए getinfo का उपयोग करना होगा और उसके बाद फ़ाइल को उसमें से ब्लॉक में खोलना होगा और उसे उस स्थान पर लिखना होगा जहां आप फ़ाइल चाहते हैं जाने के लिए और एक भी mtime को बहाल करने के लिए होता प्रतिशत अद्यतन है कि अगर एक उदाहरण तलाश है:

import zipfile 
z = zipfile.ZipFile(some_source) 
entry_info = z.getinfo(entry_name) 
i = z.open(entry_name) 
o = open(target_name, 'w') 
offset = 0 
while True: 
    b = i.read(block_size) 
    offset += len(b) 
    set_percentage(float(offset)/float(entry_info.file_size) * 100.) 
    if b == '': 
     break 
    o.write(b) 
i.close() 
o.close() 
set_attributes_from(entry_info) 

इस अर्क entry_nametarget_name को


इस का सबसे भीद्वारा किया जाता है, लेकिन यह एक कॉल प्रगति के लिए वापस नहीं है या तो

ZipFile.extract विधि के स्रोत कॉल _extract_member उपयोग करता है:

source = self.open(member, pwd=pwd) 
target = file(targetpath, "wb") 
shutil.copyfileobj(source, target) 
source.close() 
target.close() 

जहां सदस्य अगर यह getinfo(member) द्वारा एक ZipInfo वस्तु के लिए एक नाम से परिवर्तित किया गया है एक ZipInfo ऑब्जेक्ट नहीं था

+0

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

+0

फ़ोल्डर ज़िप फ़ाइलों में मौजूद नहीं हैं क्योंकि फ़ाइल प्रविष्टियों के नाम पथ नाम हैं i.e 'कुछ/पथ/से/कुछ/फ़ाइल' फ़ाइल का नाम होगा और निर्देशिका –

+0

निर्देशिकाओं के लिए कोई प्रविष्टियां नहीं हैं। मैंने ओएस मॉड्यूल के कुछ उपयोग के साथ zipfile मॉड्यूल में निकालने विधि का उपयोग किया। धन्यवाद। –

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