我正在尝试将文件夹删除后将其复制到另一个文件夹:

for i in range(0,3):
   try:
      dir_util.remove_tree("D:/test2")
 #     shutil.rmtree("D:/test2")
      print "removed"
   except: pass

   dir_util.copy_tree("D:/test1", "D:/test2")

   print i

D:/test1包含一个名为test_file的空文件。
如果我使用dir_util.remove_tree可以正常工作,但是在shutil.rmtree之后它只能工作一次,在第二次迭代中它将失败。输出:
removed
0
removed
Traceback (most recent call last):
  File "test.py", line 53, in <module>
    dir_util.copy_tree("D:/test1", "D:/test2")
  File "C:\Python27\lib\distutils\dir_util.py", line 163, in copy_tree
    dry_run=dry_run)
  File "C:\Python27\lib\distutils\file_util.py", line 148, in copy_file
    _copy_file_contents(src, dst)
  File "C:\Python27\lib\distutils\file_util.py", line 44, in _copy_file_contents
    fdst = open(dst, 'wb')
IOError: [Errno 2] No such file or directory: 'D:/test2\\test_file'

对我而言,使用shutil.rmtree更为方便,因为它允许删除只读文件的错误处理。
dir_util.remove_tree和shutil.rmtree有什么区别?为什么rmtree第二次之后copy_tree不起作用?

我在Windows 7上运行Python 2.7.2

最佳答案

似乎是distutils中的错误。如果您复制文件夹,然后将其删除,然后再次复制,它将失败,因为它会缓存所有已创建的目录。要解决此问题,您可以在复制前清除_path_created:

distutils.dir_util._path_created = {}
distutils.dir_util.copy_tree(src, dst)

关于python - shutdownil.rmtree后dir_util.copy_tree失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9160227/

10-09 03:30