为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Python将文件的整个目录复制到现有目录中?

如何使用Python将文件的整个目录复制到现有目录中?

倚天杖 2019-11-08 10:39:41
从包含一个名为目录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。


查看完整回答
反对 回复 2019-11-08
  • 3 回答
  • 0 关注
  • 991 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信