2010-05-12 6 views
5

ध्यान न दें।अजगर copytree मैं फ़ाइलों/निर्देशिकाओं के एक पेड़ की प्रतिलिपि करने के अजगर का उपयोग करने के कोशिश कर रहा हूँ पैटर्न

यह सब कुछ है कि foo में समाप्त होता है कॉपी करने के लिए copytree उपयोग करना संभव है?

एक ignore_patterns पैटर्न समारोह नहीं है, मैं इसे एक नकार नियमित अभिव्यक्ति दे सकते हैं? क्या वे अजगर में समर्थित हैं?

उदाहरण के लिए।

प्रतिलिपि (स्रोत, dest, झूठी, ignore_pattern ('! *। Foo')) कहां! मतलब है कि कुछ भी नहीं जो foo में समाप्त होता है। धन्यवाद।

+0

सभी शब्दों है कि .foo प्राप्त करने के लिए सही अभिव्यक्ति है। (?! ...) फिर से मॉड्यूल प्रलेखन के रूप में देखा [1] भाव नकारना करने के लिए इस्तेमाल किया जा सकता है, लेकिन मैं यह काम नहीं कर सके ... 1- http://docs.python.org/library/ re.html – Diones

उत्तर

7

shutil.copytree एक ignore keyword है। ignore किसी भी कॉल करने योग्य पर सेट किया जा सकता है। निर्देशिका का दौरा किया जा रहा है और इसकी सामग्री की एक सूची को देखते हुए, कॉल करने योग्य को अनदेखा करने के लिए निर्देशिका और फ़ाइल नामों का अनुक्रम वापस करना चाहिए।

उदाहरण के लिए: unutbu के जवाब पर

import shutil 
def ignored_files(adir,filenames): 
    return [filename for filename in filenames if not filename.endswith('foo')] 

shutil.copytree(source, destination, ignore=ignored_files) 
+1

मैं सिर्फ का कहना चाहते थे कि [unutbu के जवाब] (http://stackoverflow.com/a/2821871/1177225) नहीं होगा नेस्ट निर्देशिका जब तक कि वे भी "foo" में खत्म हो बढ़ावा देते हैं। इसके बजाए, आप शायद os.path.isdir (फ़ाइल नाम) नहीं होने पर केवल endwith जांच करना चाहते हैं। – Josh

+0

'os.path.isdir'' os.path.join (adir, filename) ' –

4

बिल्डिंग। निम्नलिखित सभी फ़ाइलों की एक सूची लेता है, फिर "ignore_patterns" से मेल खाने वाले को हटा देता है, फिर को से अनदेखा करने की फ़ाइलों के रूप में लौटाता है। यही है, यह केवल उन फ़ाइलों की प्रतिलिपि बनाने के लिए एक डबल अस्वीकृति करता है जो आप चाहते हैं। '(। * \। Foo)'

import glob, os, shutil 

def copyonly(dirpath, contents): 
    return set(contents) - set(
     shutil.ignore_patterns('*.py', '*.el')(dirpath, contents), 
     ) 

shutil.copytree(
    src='.', 
    dst='temp/', 
    ignore=copyonly, 
    ) 
print glob.glob('temp/*') 
0
def documentation(format): 
    call(['make', format, '-C', DOC_SOURCE_DIR]) 

    if (os.path.exists(DOC_DIR)): 
     shutil.rmtree(DOC_DIR) 

    ignored = ['doctrees'] 
    shutil.copytree('{0}/build/'.format(DOC_SOURCE_DIR), DOC_DIR, ignore=shutil.ignore_patterns(*ignored)) 
+1

पर कॉल किया जाना चाहिए अपने कोड का स्पष्टीकरण जोड़ें। –

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

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