2011-05-19 10 views
10

मैं .tgz फ़ाइलों को निकालने के लिए नीचे दिए गए कोड का उपयोग कर रहा हूं। लॉग फ़ाइलों का प्रकार (.tgz) कि मुझे निकालने की आवश्यकता है उप-निर्देशिकाएं जिनमें अन्य .tgz फ़ाइलें और .tar फ़ाइलें हैं। मैं उनको निकालना चाहता हूं।मैं एक .tgz फ़ाइल निकालना चाहता हूं और किसी भी उपनिर्देशिका को निकालना चाहता हूं जिसमें फ़ाइलें हैं .tgz और .tar

अंत में, मैं सभी .log फाइलों में कुछ तार और .txt फ़ाइलें है कि एक .tgz फ़ाइल में प्रकट हो सकता है के लिए खोज करने के लिए कोशिश कर रहा हूँ।

नीचे वह कोड है जिसका उपयोग मैं .tgz फ़ाइल निकालने के लिए कर रहा हूं। मैं उप-फ़ाइलों (.tgz और .tar) निकालने का तरीका निकालने का प्रयास कर रहा हूं। अब तक, मैं असफल रहा हूं।

import os, sys, tarfile 

try: 
    tar = tarfile.open(sys.argv[1] + '.tgz', 'r:gz') 
    for item in tar: 
     tar.extract(item) 
    print 'Done.' 
except: 
    name = os.path.basename(sys.argv[0]) 
    print name[:name.rfind('.')], '<filename>' 
+5

यह एक रिकर्सन के लिए एक महान उपयोग केस प्रतीत होता है। आप फ़ंक्शन में पहला टैरफाइल प्रदान करते हैं और यदि यह किसी अन्य टैर-फ़ाइल से मुकाबला करता है, तो फ़ंक्शन स्वयं को नई टैर फ़ाइल के साथ कॉल करता है। अगर आपको लॉग-फाइल मिलती है, तो आप लॉगफाइल को संभालने वाले दूसरे फ़ंक्शन का आह्वान कर सकते हैं। – Jacob

उत्तर

11

यह आपको इच्छित परिणाम देना चाहिए: जैसा कि @cularis कहा इस प्रत्यावर्तन कहा जाता है

import os, sys, tarfile 

def extract(tar_url, extract_path='.'): 
    print tar_url 
    tar = tarfile.open(tar_url, 'r') 
    for item in tar: 
     tar.extract(item, extract_path) 
     if item.name.find(".tgz") != -1 or item.name.find(".tar") != -1: 
      extract(item.name, "./" + item.name[:item.name.rfind('/')]) 
try: 

    extract(sys.argv[1] + '.tgz') 
    print 'Done.' 
except: 
    name = os.path.basename(sys.argv[0]) 
    print name[:name.rfind('.')], '<filename>' 

+0

कोड .tgz फ़ाइल को अनजिप करता है और एक फ़ोल्डर - 'भंडारण' को हटा देता है, और उस फ़ोल्डर में दो अन्य फ़ोल्डर्स = 'फ़ोल्डर 1' और 'फ़ोल्डर' 2 होते हैं, जिनमें दोनों .tgz फ़ाइलें और .tar फ़ाइलें नहीं हैं निकाली गई। उपरोक्त कोड केवल मुख्य .tgz फ़ाइल को अनजिप कर रहा है, लेकिन सबफ़ोल्डर में फ़ाइलें नहीं। – suffa

+1

क्षमा करें, मैं टैर फ़ाइलों के बारे में भूल गया। कोड अपडेट किया गया। फिर भी यह subfolders में unzippping .tgz था। अब यह संग्रह में घिरे .tar और .tgz फ़ाइलों दोनों के लिए काम कर रहा है। – berni

+0

मैं cmd ​​लाइन की बजाय स्क्रिप्ट के रूप में इस कोड को कैसे निष्पादित करूं? धन्यवाद! – suffa

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

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