python - 有没有一种万无一失的方法可以让系统有足够的时间在运行 copytree 之前删除文件夹

标签 python windows shutil

我有一些目录需要更新我正在使用以下代码

for newdir in newdirs:
    olddir = newdir.replace('h:\\','G:\\').replace('_academic','')
    shutil.rmtree(newdir)
    shutil.copytree(olddir,newdir)

偶尔会报错

WindowsError: [Error 5] Access is denied: 'h:\\mydir\\sub1\\sub2\\sub3\\sub4\\sub5'

由于错误不会发生在以前的目录上,我认为原因一定是某种访问冲突 - rmtree 调用和 copytree 之间发生的时间太少,所以我修改了代码以浪费一些时间

for newdir in newdirs:
    olddir = newdir.replace('h:\\','G:\\').replace('_academic','')
    shutil.rmtree(newdir)
    for item in range(0,20,1):
        pass
    shutil.copytree(olddir,newdir)

这使错误消失,旧目录被复制到新位置。

我不喜欢这个,因为它看起来很摇摇欲坠 - 即使对我来说也是如此。

  1. 我对错误原因(冲突)的理解有误吗
  2. 有没有更好的方法来确保系统有足够的时间在我们开始复制树之前完成 rmtree 操作?

最佳答案

如果在您等待时错误消失了,您可能没有弄错原因。因此,遵循等待的想法,但要有目的地等待,这可能稍微更好:

for newdir in newdirs:
    olddir = newdir.replace('h:\\','G:\\').replace('_academic','')
    shutil.rmtree(newdir)
    while os.path.exists(newdir): # check if it exists
        pass
    shutil.copytree(olddir,newdir)

如果发生一些奇怪的错误阻止目录被删除但没有引发异常,while 循环理论上可以永远持续下去,但我发现这种可能性极小。

我对这个解决方案一点也不感到自豪,但除非有新知识,否则这应该比任意延迟更简单一些。

关于python - 有没有一种万无一失的方法可以让系统有足够的时间在运行 copytree 之前删除文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21505313/

相关文章:

windows - 在 Windows 上的 Vim 中映射 alt 键

c++ - 如何使用 Windows API 确定注册表值数据的大小?

python 复制带有元数据的文件,shutil 与手动打开和写入重复文件

python - 在没有 copystat 的情况下使用 shutil.copytree

python - 当使用 Python TensorFlow 输入形状 (53,))... 这个逗号是怎么回事?

python - 是否有用 PLY 编写的 Python(或子集)语法或词法分析器和解析器?

python - 更改副本,但更改父级。为什么?

windows - 当传递的参数有引号时使用 DOS 启动命令

python - Errno 13 - 文档文件夹中的权限被拒绝?

python - 如何在 Pandas 中对多个列进行滚动除法?