复制目录的内容与蟒蛇目录[复制](Copy directory contents into a di

2019-07-20 09:10发布

这个问题已经在这里有一个答案:

  • 如何复制文件的整个目录到使用Python现有的目录? 13个回答

我有一个目录/ A / B / C有文件和子目录。 我需要复制/ A / B / C / *中/ X / Y / Z目录。 我可以使用哪些Python方法?

我试图shutil.copytree("a/b/c", "/x/y/z")但蟒试图创建/ X / Y / Z和引发error "Directory exists"

Answer 1:

我发现这个代码工作。

from distutils.dir_util import copy_tree

# copy subdirectory example
fromDirectory = "/a/b/c"
toDirectory = "/x/y/z"

copy_tree(fromDirectory, toDirectory)

参考:

  • Python的2: https://docs.python.org/2/distutils/apiref.html#distutils.dir_util.copy_tree
  • Python的3: https://docs.python.org/3/distutils/apiref.html#distutils.dir_util.copy_tree


Answer 2:

您还可以使用glob2递归收集所有路径(使用**子文件夹通配符),然后使用shutil.copyfile,保存路径

glob2链接: https://code.activestate.com/pypm/glob2/



Answer 3:

from subprocess import call

def cp_dir(source, target):
    call(['cp', '-a', source, target]) # Linux

cp_dir('/a/b/c/', '/x/y/z/')

这个对我有用。 基本上,它执行壳命令CP。



Answer 4:

蟒蛇库已过时,使用此功能。 我做了一个正常工作:

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('..')


文章来源: Copy directory contents into a directory with python [duplicate]