当前位置: 首页 > 知识库问答 >
问题:

PermissionError:[WinError 32]进程无法访问该文件,因为另一个进程正在使用该文件

孔茂
2023-03-14

我的代码用于查看文件夹并删除分辨率为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是我电脑上唯一运行的程序。导致此问题的原因是什么?如何解决?

共有3个答案

左宁
2023-03-14

这基本上是权限错误,您只需要在删除文件之前关闭它。获取图像大小信息后,关闭图像

im.close()
邢和光
2023-03-14

我遇到了同样的问题,但是错误是间歇性的。如果您正在正确编码您的文件打开/关闭,并且仍然运行到此错误,请确保您没有将文件与Dropbox、Google Drive等同步。我暂停了Dropbox,我不再看到错误。

濮阳唯
2023-03-14

您的进程是打开文件的进程(通过im仍然存在)。您需要先关闭它,然后再删除它。

我不知道PIL是否支持带有上下文的,但它是否支持:

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)

这将确保在进入os.remove之前删除im(并关闭文件)。

如果没有,你可能想看看枕头,因为PIL开发几乎已经死了。

 类似资料: