我试图删除一个图像,如果它在尝试用PIL打开它时会引发IOError,但由于某些原因我的尝试,除了这里的设置不起作用。
当我运行它时,它会给出错误: WindowsError:[错误32]该进程无法访问该文件,因为该文件正由另一个进程使用:
dir_src = 'D:\\images'
folderlist = os.listdir(dir_src)
for folder in folderlist:
flag = False
dir_src_fine = dir_src + '\\' + folder
filelist = os.listdir(dir_src_fine)
for x in filelist:
flag = False
name = dir_src_fine + "\\" + x
try:
im = Image.open(name).convert('RGB')
im.close()
except IOError:
os.remove(name)
答案 0 :(得分:1)
您应该在完成后立即关闭原始文件。现在你不保存副本,所以打开/转换分两步。在尝试使用它之前将im
初始化为None
,并在异常中包含关闭逻辑以确保它确实已被释放。
dir_src = 'D:\\images'
folderlist = os.listdir(dir_src)
for folder in folderlist:
flag = False
dir_src_fine = dir_src + '\\' + folder
filelist = os.listdir(dir_src_fine)
for x in filelist:
flag = False
name = dir_src_fine + "\\" + x
im = im2 = None
try:
im = Image.open(name)
im2 = im.convert('RGB')
im.close()
except IOError:
if im:
im.close()
os.remove(name)
finally:
if im:
im.close()
if im2:
im2.close()