python-3.x 许可错误:[WinError 32]进程无法访问该文件,因为它正被另一个进程使用

kninwzqo  于 2023-06-25  发布在  Python
关注(0)|答案(6)|浏览(250)

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

lo8azlld

lo8azlld1#

您的进程是打开文件的进程(通过仍然存在的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(并关闭文件)。
如果没有,你可能想看看枕头,因为PIL的发展几乎是死的。

zpjtge22

zpjtge222#

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

oewdyzsn

oewdyzsn3#

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

im.close()
5n0oy7gb

5n0oy7gb4#

我也有这个问题,在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

如下所示:https://no.coredump.biz/questions/45042466/permissionerror-winerror-32-when-trying-to-delete-a-temporary-image

1wnzp6jl

1wnzp6jl5#

希望这能帮上忙。

import os

def close():

    try:
        os.system('TASKKILL /F /IM excel.exe')

    except Exception:
        print("KU")

close()
p1tboqfb

p1tboqfb6#

不管出于什么原因,我这一端的原因是IntellIJ持有文件的句柄。关闭Intellij解决了这个问题。

相关问题