2013-02-22 116 views
39

我有一個目錄/ a/b/c,它有文件和子目錄。 我需要複製/ x/y/z目錄中的/ a/b/c/*。我可以使用哪些python方法?將目錄內容複製到python目錄下

我試過shutil.copytree("a/b/c", "/x/y/z"),但python試圖創建/ x/y/z並引發一個error "Directory exists"

+1

你想移動或複製目錄嗎?你的標題說移動,但你的內容說複製。由於這些是兩個不同的事情,所以你的意思究竟是哪一個。 – 2013-02-22 22:37:15

+0

也許舉一個前後的例子,讓它更清楚你想要的效果是什麼,以及? – Xymostech 2013-02-22 22:39:44

+0

感謝您的評論,我會更新標題。這是複製,而不是移動。 – prosseek 2013-02-22 22:39:47

回答

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',如果這是你需要的。 – 2013-02-22 22:59:53

+2

請記住,如果您爲同一組參數調用兩次,copy_tree將失敗,並且同時擦除了目的地。這是由於mkpath中的路徑緩存,請參閱https://bugs.python.org/issue10948 – yacoob 2016-12-26 00:15:24

+0

如果我想要覆蓋所有現有文件,無論如何,該怎麼辦。如果update = 0,這個函數是否覆蓋現有的文件? – Dmitriy 2017-01-30 17:48:24

-4

python 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('..') 
相關問題