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

时间:2014-11-30 16:32:10

标签: python python-3.x file-handling

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

5 个答案:

答案 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

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

答案 4 :(得分:0)

希望这会有所帮助。

import os

def close():

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

    except Exception:
        print("KU")

close()