我的代码用于查看文件夹并删除分辨率为1920x1080的图像的脚本。我遇到的问题是当我的代码运行时;
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是我计算机上运行的唯一程序。是什么导致了这个问题,我该如何解决?
答案 0 :(得分:10)
您的流程是打开文件的流程(通过im
仍然存在)。您需要先删除它才能删除它。
我不知道PIL是否支持with
个上下文,但是如果它支持:
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)
with Image.open(filepath) as im:
x, y = im.size
totalsize = x*y
if totalsize < 2073600:
os.remove(filepath)
这将确保在您到达im
之前删除os.remove
(并关闭文件)。
如果它没有,你可能想看看Pillow,因为PIL开发已经基本上死了。
答案 1 :(得分:7)
我遇到了同样的问题,但错误是间歇性的。如果您正确地打开/关闭文件并仍然遇到此错误,请确保您没有将文件与Dropbox,Google云端硬盘等同步。我暂停了Dropbox,我不再看到错误。
答案 2 :(得分:1)
这基本上是权限错误,您只需要在删除文件之前关闭文件即可。获取图像尺寸信息后,使用
关闭图像im.close()
答案 3 :(得分:1)
在Windows [WinError 32]中也遇到了问题
通过更改来解决:
try:
f = urllib.request.urlopen(url)
_, fname = tempfile.mkstemp()
with open(fname, 'wb') as ff:
ff.write(f.read())
img = imread(fname)
os.remove(fname)
return img
进入:
try:
f = urllib.request.urlopen(url)
fd, fname = tempfile.mkstemp()
with open(fname, 'wb') as ff:
ff.write(f.read())
img = imread(fname)
os.close(fd)
os.remove(fname)
return img
答案 4 :(得分:0)
希望这会有所帮助。
import os
def close():
try:
os.system('TASKKILL /F /IM excel.exe')
except Exception:
print("KU")
close()