如何将c:\\ xxx\yyy中所有文件的目录复制到python中的c:\\ zzz \

nas*_*sio 9 python python-2.7

我一直在尝试使用"copytree(src,dst)",但我不能,因为目标文件夹应该存在.在这里你可以看到我写的一小段代码:

def copy_dir(src,dest):
    import shutil
    shutil.copytree(src,dest)

copy_dir('C:/crap/chrome/','C:/test/') 
Run Code Online (Sandbox Code Playgroud)

而这正是我所得到的错误......

Traceback (most recent call last):
File "C:\Documents and Settings\Administrator\workspace\MMS-Auto\copy.py", line 5, in        <module>
copy_dir('C:/crap/chrome/','C:/test/')   
File "C:\Documents and Settings\Administrator\workspace\MMS-Auto\copy.py", line 3, in copy_dir
shutil.copytree(src,dest)
File "C:\Python27\lib\shutil.py", line 174, in copytree
os.makedirs(dst)
File "C:\Python27\lib\os.py", line 157, in makedirs
mkdir(name, mode)
WindowsError: [Error 183] Cannot create a file when that file already exists:    'C:/test/'
Run Code Online (Sandbox Code Playgroud)

这是我的问题是有没有一种方法可以在不创建自己的copytree函数的情况下实现相同的结果?

先感谢您.

Nic*_*ing 14

我使用这个distutils包比其他答案更成功.

http://docs.python.org/2/distutils/apiref.html#module-distutils.dir_util

distutils.dir_util.copy_tree函数的工作方式非常相似,shutil.copytree只是dir_util.copy_tree会覆盖存在的目录而不是使用Exception崩溃.

更换:

import shutil
shutil.copytree(src, dst)
Run Code Online (Sandbox Code Playgroud)

有:

import distutils.dir_util
distutils.dir_util.copy_tree(src, dst)
Run Code Online (Sandbox Code Playgroud)


Geo*_*rge 1

查看errno可能的错误。可以.copytree()先使用,出现错误时再使用shutil.copy

来自: http: //docs.python.org/library/shutil.html#shutil.copytree

如果发生异常,则会引发错误并列出原因。

然后您就可以决定如何处理它并实现代码来处理它。

import shutil, errno

def copyFile(src, dst):
    try:
        shutil.copytree(src, dst)
    # Depend what you need here to catch the problem
    except OSError as exc: 
        # File already exist
        if exc.errno == errno.EEXIST:
            shutil.copy(src, dst)
        # The dirtory does not exist
        if exc.errno == errno.ENOENT:
            shutil.copy(src, dst)
        else:
            raise
Run Code Online (Sandbox Code Playgroud)

关于.copy(): http: //docs.python.org/library/shutil.html#shutil.copy

将文件 src 复制到文件或目录 dst。如果 dst 是目录,则在指定目录中创建(或覆盖)与 src 具有相同基本名称的文件。复制权限位。src 和 dst 是以字符串形式给出的路径名。

编辑:也许还研究一下distutils.dir_util.copy_tree