PermissionError: [WinError 32] The process cannot access the file because it is being used by another process
Question:
My code is for a script that looks at a folder and deletes images that are under a resolution of 1920×1080. The problem I am having is that when my code runs;
import os
from PIL import Image
while True:
img_dir = r"C:UsersHaroldGoogle Drivewallpapers"
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)
I get this error message:
Traceback (most recent call last):
File "C:UsersHaroldDesktopimagefilter.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'
Just to confirm, Python is the only program running on my computer. What is causing this problem and how do I fix it?
Answers:
Your process is the one that has the file open (via im
still existing). You need to close it first before deleting it.
I don’t know if PIL supports with
contexts, but if it did:
import os
from PIL import Image
while True:
img_dir = r"C:UsersHaroldGoogle Drivewallpapers"
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)
This will make sure to delete im
(and close the file) before you get to os.remove
.
If it doesn’t you might want to check out Pillow, since PIL development is pretty much dead.
I was running into the same problem, but the error was intermittent. If you are coding your file open/close correctly and still running into this error, make sure you are not synching the files with Dropbox, Google Drive, etc. I paused Dropbox and I no longer see the error.
This is basically permission error, you just need to close the file before removing it. After getting the image size info, close the image with
im.close()
I also had the issue, in windows [WinError 32]
Solved by changing:
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
into:
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
As found here: https://no.coredump.biz/questions/45042466/permissionerror-winerror-32-when-trying-to-delete-a-temporary-image
Hopefully, this will help.
import os
def close():
try:
os.system('TASKKILL /F /IM excel.exe')
except Exception:
print("KU")
close()
For whatever reason the cause of this on my end was IntellIJ holding the handle of the file. Closing Intellij solved the issue.
My code is for a script that looks at a folder and deletes images that are under a resolution of 1920×1080. The problem I am having is that when my code runs;
import os
from PIL import Image
while True:
img_dir = r"C:UsersHaroldGoogle Drivewallpapers"
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)
I get this error message:
Traceback (most recent call last):
File "C:UsersHaroldDesktopimagefilter.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'
Just to confirm, Python is the only program running on my computer. What is causing this problem and how do I fix it?
Your process is the one that has the file open (via im
still existing). You need to close it first before deleting it.
I don’t know if PIL supports with
contexts, but if it did:
import os
from PIL import Image
while True:
img_dir = r"C:UsersHaroldGoogle Drivewallpapers"
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)
This will make sure to delete im
(and close the file) before you get to os.remove
.
If it doesn’t you might want to check out Pillow, since PIL development is pretty much dead.
I was running into the same problem, but the error was intermittent. If you are coding your file open/close correctly and still running into this error, make sure you are not synching the files with Dropbox, Google Drive, etc. I paused Dropbox and I no longer see the error.
This is basically permission error, you just need to close the file before removing it. After getting the image size info, close the image with
im.close()
I also had the issue, in windows [WinError 32]
Solved by changing:
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
into:
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
As found here: https://no.coredump.biz/questions/45042466/permissionerror-winerror-32-when-trying-to-delete-a-temporary-image
Hopefully, this will help.
import os
def close():
try:
os.system('TASKKILL /F /IM excel.exe')
except Exception:
print("KU")
close()
For whatever reason the cause of this on my end was IntellIJ holding the handle of the file. Closing Intellij solved the issue.