gpt4 book ai didi

python - dir_util.copy_tree 在 shutil.rmtree 之后失败

转载 作者:太空狗 更新时间:2023-10-29 20:36:46 30 4
gpt4 key购买 nike

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

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 - dir_util.copy_tree 在 shutil.rmtree 之后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9160227/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com