2013-02-22 17 views
39

के साथ निर्देशिका में कॉपी करें मेरे पास एक निर्देशिका/ए/बी/सी है जिसमें फाइलें और उप-निर्देशिकाएं हैं। मुझे/x/y/z निर्देशिका में/a/b/c/* की प्रतिलिपि बनाने की आवश्यकता है। मैं किस पायथन विधियों का उपयोग कर सकता हूं?निर्देशिका निर्देशिका को पाइथन

मैंने shutil.copytree("a/b/c", "/x/y/z") की कोशिश की, लेकिन पायथन/x/y/z बनाने की कोशिश करता है और error "Directory exists" उठाता है।

+1

क्या आप निर्देशिका को स्थानांतरित या कॉपी करने की कोशिश कर रहे हैं? आपका शीर्षक कदम कहता है, लेकिन आपकी सामग्री प्रतिलिपि कहती है। चूंकि ये दो अलग-अलग चीजें हैं, यह वास्तव में मायने रखती है कि आपका क्या मतलब है। –

+0

शायद पहले और बाद में इसका उदाहरण दें, यह स्पष्ट करने के लिए कि आप क्या प्रभाव चाहते हैं? – Xymostech

+0

आपकी टिप्पणी के लिए धन्यवाद, मैं शीर्षक अपडेट कर दूंगा। यह प्रतिलिपि है, स्थानांतरित नहीं है। – prosseek

उत्तर

72

मुझे यह कोड काम कर रहा है।

from distutils.dir_util import copy_tree 

# copy subdirectory example 
fromDirectory = "https://stackoverflow.com/a/b/c" 
toDirectory = "/x/y/z" 

copy_tree(fromDirectory, toDirectory) 
+1

एक उत्कृष्ट समाधान, मैं सुझाव देता हूं कि copy_tree() में 'update = 1'' जोड़ने का सुझाव दें, यदि आपको यही चाहिए। –

+2

बस ध्यान रखें कि अगर आप इसे तर्क के उसी सेट के लिए दो बार कॉल करते हैं तो copy_tree विफल हो जाएगा, और इस दौरान आपने गंतव्य को मिटा दिया है। यह mkpath में पथ कैशिंग के कारण है, https://bugs.python.org/issue10948 – yacoob

+0

देखें यदि मैं सभी मौजूदा फ़ाइलों को ओवरराइट करना चाहता हूं तो इससे कोई फर्क नहीं पड़ता। क्या यह फ़ंक्शन मौजूदा फ़ाइलों को ओवरराइट करता है यदि अद्यतन = 0? – Dmitriy

1

तुम भी glob2 का उपयोग रिकर्सिवली सभी पथ (का उपयोग कर ** सबफ़ोल्डर वाइल्डकार्ड) इकट्ठा करने और फिर shutil.copyfile उपयोग करने के लिए कर सकते हैं, बचत रास्तों

glob2 लिंक: https://code.activestate.com/pypm/glob2/

-4

पायथन libs इस फ़ंक्शन के साथ अप्रचलित हैं। मैंने ऐसा किया है जो सही तरीके से काम करता है:

import os 
import shutil 

def copydirectorykut(src, dst): 
    os.chdir(dst) 
    list=os.listdir(src) 
    nom= src+'.txt' 
    fitx= open(nom, 'w') 

    for item in list: 
     fitx.write("%s\n" % item) 

    fitx.close() 

    f = open(nom,'r') 
    for line in f.readlines(): 
     if "." in line: 
      shutil.copy(src+'/'+line[:-1],dst+'/'+line[:-1]) 
     else: 
      if not os.path.exists(dst+'/'+line[:-1]): 
       os.makedirs(dst+'/'+line[:-1]) 
       copydirectorykut(src+'/'+line[:-1],dst+'/'+line[:-1]) 
      copydirectorykut(src+'/'+line[:-1],dst+'/'+line[:-1]) 
    f.close() 
    os.remove(nom) 
    os.chdir('..')