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

2024-09-27 21:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我偶尔会出错

^{pr2}$

由于错误不会发生在以前的目录上,所以我决定原因一定是访问冲突-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操作?在

Tags: 代码in目录for错误时间原因replace
1条回答
网友
1楼 · 发布于 2024-09-27 21:27:54

如果错误在你等待时消失了,那么你可能对原因没有错。因此,按照等待的想法,但要有目的地等待,这可能会稍微好一点:

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循环理论上可能永远运行,但我发现这是极不可能的。在

我一点也不为这个解决方案感到骄傲,但除非有新的知识,这应该比任意延迟更简单一些。在

相关问题 更多 >

    热门问题