我有一些需要更新的目录--我使用了以下代码
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调用和复制树之间发生的时间太少,所以我修改了代码以浪费一些时间。
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)
这使得错误消失,旧目录被复制到新位置。
我不喜欢这个,因为这看起来很烂--甚至对我来说也是如此。
发布于 2014-02-01 16:04:31
如果当你等待的时候错误消失了,那么你很可能没有错误的原因。因此,遵循等待的想法,但有目的地等待,这可能会稍微好一点:
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
循环可能永远运行,但我发现这是非常不可能的。
我一点也不为这个解决方案感到骄傲,,,但是如果没有新的知识,这应该比任意的延迟更能防止愚昧。
https://stackoverflow.com/questions/21505313
复制