2013-07-18 6 views
9

में निर्देशिका संरचना को बनाए रखे बिना एक ज़िप संग्रह से एक विशिष्ट फ़ाइल निकालें मैं पाइथन का उपयोग करके एक ज़िप संग्रह से एक विशिष्ट फ़ाइल निकालने का प्रयास कर रहा हूं।पायथन

इस मामले में, एपीके से एक एपीके आइकन निकालें।

मैं वर्तमान में

ziphandle = open(tDir + mainapk[0],'rb') #`pwd`/temp/x.apk 
zip = zipfile.ZipFile(ziphandle) 
zip.extract(icon[1], tDir) # extract /res/drawable/icon.png from apk to `pwd`/temp/... 

जो काम करता है, मेरी स्क्रिप्ट निर्देशिका यह temp/res/drawable/icon.png बनाने है जो अस्थायी प्लस एक ही मार्ग है के रूप में फ़ाइल apk अंदर है में उपयोग कर रहा हूँ।

जो मैं वास्तव में चाहता हूं वह temp/icon.png के साथ समाप्त होना है।

क्या यह सीधे ज़िप ज़िप के साथ ऐसा करने का कोई तरीका है, या मुझे निकालने की आवश्यकता है, फिर फ़ाइल को ले जाएं, फिर निर्देशिकाओं को मैन्युअल रूप से हटा दें?

उत्तर

16

आप zipfile.ZipFile.read उपयोग कर सकते हैं:

import os 

with zipfile.ZipFile(tDir + mainapk[0]) as z: 
    with open(os.path.join(tDir, os.path.basename(icon[1])), 'wb') as f: 
     f.write(z.read(icon[1])) 

या zipfile.ZipFile.open का उपयोग करें:

import os 
import shutil 
with zipfile.ZipFile(tDir + mainapk[0]) as z: 
    with z.open(icon[1]) as zf, open(os.path.join(tDir, os.path.basename(icon[1])), 'wb') as f: 
     shutil.copyfileobj(zf, f) 
+0

दोनों बहुत अच्छा जवाब है, बस उसे चलती है जैसे मैं था की तुलना में कहीं अधिक सुवक्ता। प्रश्न पूछने के लिए मामूली सुधार, खुला है (os.path.join (tDir, os.path.basename (आइकन [1])), 'wb') f के रूप में: ताकि आउटपुट आइकन temp dir में है, cwd() नहीं जहां स्क्रिप्ट है। धन्यवाद – o0rebelious0o