私のコードは、フォルダーを見て、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が私のコンピューターで実行されている唯一のプログラムです。この問題の原因は何ですか?どうすれば修正できますか?
あなたのプロセスはファイルを開いたものです(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の開発はほぼ終了しているため、Pillowを確認することをお勧めします。
私は同じ問題に直面していましたが、エラーは断続的でした。ファイルのオープン/クローズを正しくコーディングしてもこのエラーが発生する場合は、DropboxやGoogleドライブなどとファイルを同期していないことを確認してください。Dropboxを一時停止したため、エラーは表示されなくなりました。
これは基本的に許可エラーです。削除する前にファイルを閉じるだけです。画像サイズ情報を取得したら、画像を閉じます
im.close()