我的代码是一个脚本,它查看文件夹并删除分辨率为1920 x1080的图像。我遇到的问题是,当我的代码运行时;
import os
from PIL import Image
while True:
img_dir = r"C:\Users\Harold\Google Drive\wallpapers"
for filename in os.listdir(img_dir):
filepath = os.path.join(img_dir, filename)
im = Image.open(filepath)
x, y = im.size
totalsize = x*y
if totalsize < 2073600:
os.remove(filepath)
我得到这个错误消息:
Traceback (most recent call last):
File "C:\Users\Harold\Desktop\imagefilter.py", line 12, in <module>
os.remove(filepath)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\Harold\\Google Drive\\wallpapers\\Car - ABT Audi RS6-R [OS] [1600x1060].jpg'
只是为了确认一下,Python是我电脑上唯一运行的程序。是什么导致了这个问题,我该如何解决它?
6条答案
按热度按时间lo8azlld1#
您的进程是打开文件的进程(通过仍然存在的
im
)。您需要先关闭它,然后再删除它。我不知道PIL是否支持
with
上下文,但如果它支持:这将确保在到达
os.remove
之前删除im
(并关闭文件)。如果没有,你可能想看看枕头,因为PIL的发展几乎是死的。
zpjtge222#
我遇到了同样的问题,但错误是间歇性的。如果您正在正确地编写文件打开/关闭代码,但仍然遇到此错误,请确保您没有将文件与Dropbox,Google Drive等同步。我暂停了Dropbox,我不再看到错误。
oewdyzsn3#
这基本上是权限错误,您只需要在删除之前关闭文件。获取图像大小信息后,关闭图像
5n0oy7gb4#
我也有这个问题,在Windows [WinError 32]
通过更改解决:
进入:
如下所示:https://no.coredump.biz/questions/45042466/permissionerror-winerror-32-when-trying-to-delete-a-temporary-image
1wnzp6jl5#
希望这能帮上忙。
p1tboqfb6#
不管出于什么原因,我这一端的原因是IntellIJ持有文件的句柄。关闭Intellij解决了这个问题。