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

新手上路,请多包涵

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

原文由 user2885647 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
2 个回答

您的进程是打开文件的进程(通过 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)

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

如果不是,您可能想查看 Pillow,因为 PIL 开发几乎已经死了。

原文由 Mike DeSimone 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Cleverlike 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题