因此,我有一些代码可以浏览一堆图像,以查看它们的大小是否正确或已损坏.我使用以下代码执行此操作:
So I have some code where I go through a bunch of images to see whether they have the right size, or is corrupt. I do this with the following code:
import PIL from PIL import Image try: img = Image.open("{}/{}.jpg".format(img_dir_path, n)) except: os.remove("{}/{}.jpg".format(img_dir_path, n)) continue if img.size[0] < 600: img.close() os.remove("{}/{}.jpg".format(img_dir_path, n)) elif img.size[0] > 600: img.close() break这当然是一个循环(如n所示).
This is within a loop of course (as the n indicates).
因此,第一个try/except代码将尝试打开文件,如果可以继续运行.如果不能,则通常已损坏,我要求它删除该文件.到目前为止,一切都很好.然后,我要求它检查图像尺寸是否正确,如果不正确,则将其删除.但是,这几乎总是每次都出错,而我最终遇到了标题中所述的错误.
So the first try/except code it tries to open a file, and if it can it moves on. If it cannot it is usually corrupt, and I ask it to delete that file. So far so good. I then ask it to check if the image has the right size, and if not, delete it. However, this is pretty much where it goes wrong every time, and I end up with the error as posted in the title.
WindowsError: [Error 32] The process cannot access the file because it is being used by another process:这是随机的.有时我会在前10到20张图片中找到它,有时会在图片300左右出现.我的想法是图像必须打开,因此不能删除.但是正如您所看到的,我之前使用过img.close()函数,因此imo不会发生这种情况.那么是否有解决此问题的方法呢?我是否需要设置时间延迟,以便它实际上有时间在尝试删除图像之前将其关闭,还是...?
And it is kind of random. Sometimes I get it within the first 10-20 images, and sometimes it happens at image 300 or something. My idea is that the image has to be open, and therefore cannot be deleted. But as you can see I have used the img.close() function just before, so this shouldn't happen imo. So is there anyway to fix this ? Do I have to put in a time delay so it actually has time to close the image before trying to delete it, or...?
推荐答案我的疯狂猜测是,它与Windows文件系统有关.添加具有短暂睡眠的重试循环应该可以解决此问题.
My wild guess that it has something to do with Windows files system. Adding a retry loop with a short sleep should solve this issue.
def remove_file(path, retries=3, sleep=0.1): for i in range(retries): try: os.remove(path) except WindowsError: time.sleep(sleep) else: break更多推荐
“该进程无法访问该文件,因为该文件正被另一个进程使用."删除图像时
发布评论