从包含一个名为目录bar(包含一个或多个文件)和一个目录baz(也包含一个或多个文件)的目录中运行以下代码。确保没有名为的目录foo。import shutilshutil.copytree('bar', 'foo')shutil.copytree('baz', 'foo')它将失败并显示:$ python copytree_test.py Traceback (most recent call last): File "copytree_test.py", line 5, in <module> shutil.copytree('baz', 'foo') File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/shutil.py", line 110, in copytree File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/os.py", line 172, in makedirsOSError: [Errno 17] File exists: 'foo'我希望它的工作方式与我键入时一样:$ mkdir foo$ cp bar/* foo/$ cp baz/* foo/是否需要shutil.copy()将每个文件复制baz到中foo?(在我已经用shutil.copytree()?将'bar'的内容复制到'foo'之后)还是有更简单/更好的方法?
3 回答
忽然笑
TA贡献1806条经验 获得超5个赞
标准的这种局限性shutil.copytree似乎是任意的和令人讨厌的。解决方法:
def copytree(src, dst, symlinks=False, ignore=None):
for item in os.listdir(src):
s = os.path.join(src, item)
d = os.path.join(dst, item)
if os.path.isdir(s):
shutil.copytree(s, d, symlinks, ignore)
else:
shutil.copy2(s, d)
请注意,它与标准copytree并不完全一致:
它不接受symlinks和ignore对根目录下的参数src树;
它不会从根本上引发shutil.Error错误src;
如果在复制子树期间出错,它将shutil.Error为该子树引发,而不是尝试复制其他子树并引发单个组合shutil.Error。
添加回答
举报
0/150
提交
取消