2017-03-24 11 views
5

रोबोट फ्रेमवर्क के साथ काम करने के साथ उप-निर्देशिकाओं के साथ ज़िप निर्देशिका, मैं एक फाइल और तीन उपनिर्देशिका वाली फाइलों के साथ एक निर्देशिका ज़िप करने की कोशिश कर रहा हूं। मैं ArchiveLibrary का उपयोग कर रहा हूं और कीवर्ड निर्देशिका में फ़ाइलों से ज़िप बनाएं। नतीजा एक ज़िप्ड निर्देशिका है जिसमें शीर्ष निर्देशिका में एक फ़ाइल और तीन खाली उपफोल्डर्स हैं।रोबोट फ्रेमवर्क

मैं लाइब्रेरी को कैसे समायोजित कर सकता हूं ताकि सबफ़ोल्डर की सामग्री भी शामिल हो?

यह हैं कि कीवर्ड मूल रूप से परिभाषित किया गया है है:

def create_zip_from_files_in_directory(self, directory, filename): 

    ''' Take all files in a directory and create a zip package from them 
    `directory` Path to the directory that holds our files 
    `filename` Path to our destination ZIP package. 
    ''' 

    if not directory.endswith("/"): 
     directory = directory + "/" 
    zip = zipfile.ZipFile(filename, "w") 
    files = os.listdir(directory) 
    for name in files: 
     zip.write(directory + name, arcname=name) 
    zip.close() 

पूरा पुस्तकालय के लिए Link

मैं सफलता के बिना os.walk के साथ प्रयोग कर रहा हूं।

कीवर्ड .robot फ़ाइल में प्रयोग किया जाता है:

Zip xml file 
    ${zipfilename}= set variable komplett.zip 
    Create zip from Files in directory ../xml/komplett/ ${zipfilename} 

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

उत्तर

3

EDIT: लाइब्रेरी संस्करण 0.4 और ऊपर का उपयोग करते समय, आप चुन सकते हैं कि उपनिर्देशिका को शामिल किया जाना चाहिए या नहीं। उदाहरण के लिए:

Create Zip From Files In Directory ../xml/komplett/ no_sub_folders.zip 
Create Zip From Files In Directory ../xml/komplett/ dir_and_sub_folders.zip sub_directories=${true} 

टार बनाने के लिए कीवर्ड पर कुछ भिन्न है - डिफ़ॉल्ट रूप से यह उपनिर्देशिका में फाइल भी शामिल है, और अब आप एक विकल्प के लिए नहीं है:

Create Tar From Files In Directory ../xml/komplett/ dir_and_sub_folders.tar 
Create Tar From Files In Directory ../xml/komplett/ no_sub_folders.tar sub_directories=${false} 

sub_directories के मूलभूत मूल्यों हैं पूर्ववर्ती व्यवहार के आधार पर, परीक्षण मामलों में उपयोग को छोड़ने के लिए नहीं।


मूल जवाब है, संस्करणों < 0.4 के लिए:

आप पुस्तकालय पैच करने के लिए तैयार हैं, तो इस कोड को करना चाहिए:

zip = zipfile.ZipFile(filename, "w") 
for path, _, files in os.walk(directory): 
    for name in files: 
     file_to_archive = os.path.join(path, name) 

     # get rid of the starting directory - so the zip structure is top-level starting from it 
     file_name = path.replace(directory, '') 
     file_name = os.path.join(file_name, name) 

     zip.write(file_to_archive, arcname=file_name) # set the desired name in the archive by the arcname argument 
zip.close() 

संपादित करें: के लिए उप-निर्देशिका संरचना को बरकरार रखता है फाइलें - उपनिर्देशिकाएं। उत्पन्न फ़ाइल लक्ष्य निर्देशिका, और अपने सभी उपनिर्देशिका शीर्ष स्तर के साथ है - यह नीचे

(के रूप में लक्ष्य निर्देशिका का पूर्ण पथ संरक्षण संग्रह के खिलाफ) arcnameargument controls क्या संग्रहीत फ़ाइल का नाम है संग्रह में - और लाइन 7 के माध्यम से, हम सापेक्ष निर्देशिका और फ़ाइल नाम को संरक्षित कर रहे हैं।

हमेशा os.path.join का उपयोग करें क्योंकि यह स्वचालित रूप से विभिन्न फ़ाइल सिस्टम (एनटीएफएस/लिनक्स/आदि) में अंतर का ख्याल रखता है।

यदि अंतिम समाधान आपके लिए काम करता है, तो पुस्तकालय के मालिक को पैच प्रस्तावित करना न भूलें - समुदाय को वापस दें :)

+0

धन्यवाद! यह मुझे थोड़ी करीब उतरा, लेकिन उम्मीद के अनुसार बिल्कुल काम नहीं किया।अब मुझे सभी फाइलें मिलती हैं, लेकिन इसके बजाय उपनिर्देशिका हटा दी जाती है। रोबोट-स्क्रिप्ट कार्य करने के लिए, मुझे निर्देशिका की सटीक संरचना को रखने की आवश्यकता है (ओटी: क्योंकि वास्तविक परीक्षण एक वैधता स्क्रिप्ट के माध्यम से ज़िपित निर्देशिका चला रहा है, जहां परीक्षण भिन्नता किसी XML फ़ाइल में डेटा को बदलना है ज़िपित निर्देशिका में रखा गया) क्या उपनिर्देशिका और संरचना भी शामिल की जा सकती है? – Sabotchick

+0

ठीक है, "जो मुझे w/o चलने के लिए सिखाएगा" :) जेके ने उस भाग को शामिल करने के लिए उत्तर संपादित किया - साथ ही कुछ कोड साफ़ कर दिया जिसकी वास्तव में आवश्यकता नहीं थी। एचटीएच – Todor

+0

अद्भुत, बस मैं क्या चाहता था! धन्यवाद! :) – Sabotchick

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