我一直在尝试使用"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)
查看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
| 归档时间: |
|
| 查看次数: |
13679 次 |
| 最近记录: |