発生した問題
Pythonで条件を指定してフォルダの画像ファイル(ここではpxが100x100以下)を削除しようとしたらPermissionErrorと怒られました。
以下のようにPILで画像を開いてサイズを取得、条件に一致したら削除、というようなことをやろうとしました。
from PIL import Image os.chdir(r"C:\Users\***\Documents\***") files = glob.glob("./*") for file in files: if ".jpeg" in file: #拡張子で画像をさがす img = Image.open(file) if img.height <= 100 and img.width <= 100: print(file) os.remove(file)
これは言われているError自体は、他のプロセスが画像を開いている(掴んでいるって言ったりする)から削除できません、という簡単なことではありますが、じゃあどうやってプロセスを開放すればいいの?というところです。
答え
delしてあげればよい。del img
del
はオブジェクトや変数を削除する構文です。
オブジェクトというのは、慣れてしまえば気にしなくなりますが、変数や変数の箱?のようなもので、これを削除するとは定義する前の状態に戻ることです。
例えば、ここで間違った書き方をしてdel file
とすると、os.remove(file)
のところで
例外が発生しました: UnboundLocalError local variable 'file' referenced before assignment
のようになります。
修正後のコード
from PIL import Image os.chdir(r"C:\Users\***\Documents\***") files = glob.glob("./*") for file in files: if ".jpeg" in file: img = Image.open(file) if img.height <= 100 and img.width <= 100: print(file) del img os.remove(file)