2013-02-22 97 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('..') 
相关问题