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

从包含一个名为目录bar(包含一个或多个文件)和一个目录baz(也包含一个或多个文件)的目录中运行以下代码。确保没有名为的目录foo。


import shutil

shutil.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 makedirs

OSError: [Errno 17] File exists: 'foo'

我希望它的工作方式与我键入时一样:


$ mkdir foo

$ cp bar/* foo/

$ cp baz/* foo/

是否需要shutil.copy()将每个文件复制baz到中foo?(在我已经用shutil.copytree()?将'bar'的内容复制到'foo'之后)还是有更简单/更好的方法?


倚天杖
浏览 1024回答 3
3回答

忽然笑

标准的这种局限性shutil.copytree似乎是任意的和令人讨厌的。解决方法:def copytree(src, dst, symlinks=False, ignore=None):&nbsp; &nbsp; for item in os.listdir(src):&nbsp; &nbsp; &nbsp; &nbsp; s = os.path.join(src, item)&nbsp; &nbsp; &nbsp; &nbsp; d = os.path.join(dst, item)&nbsp; &nbsp; &nbsp; &nbsp; if os.path.isdir(s):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shutil.copytree(s, d, symlinks, ignore)&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shutil.copy2(s, d)请注意,它与标准copytree并不完全一致:它不接受symlinks和ignore对根目录下的参数src树;它不会从根本上引发shutil.Error错误src;如果在复制子树期间出错,它将shutil.Error为该子树引发,而不是尝试复制其他子树并引发单个组合shutil.Error。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python