這個代碼原本用得好好地都沒問題
在我重裝軟體後就出問題
無法刪除他檢測到的圖片
import os
import shutil
from PIL import Image
def is_valid_jpg(jpg_file):
with open(jpg_file, 'rb') as f:
f.seek(-2, 2)
buf = f.read()
return buf == b'\xff\xd9'
def is_valid_png(png_file):
with open(png_file, 'rb') as f:
f.seek(-3, 2)
buf = f.read()
if buf == b'\x60\x82\x00':
return True
elif buf[1:] == b'\x60\x82':
return True
else:
return False
def is_valid_pic(pic_file):
if pic_file.endswith('jpeg'):
return is_valid_jpg(pic_file)
elif pic_file.endswith('png'):
return is_valid_png(pic_file)
else:
return False
DirList=["D:\\long\\Desktop\\123"]
for path in DirList:
for dirPath, dirNames, fileNames in os.walk(path):
for file in fileNames:
pic_file = os.path.join(dirPath,file)
ext=pic_file.split('.')[-1]
if not is_valid_pic(pic_file):
if ext == 'jpg' or ext == 'png':
try:
img = Image.open(pic_file)
img.load()
except Exception as e:
#print(e)
print(pic_file)
#os.remove(pic_file)#刪除檔案
https://www.sendspace.com/file/5xd5ut
這裡有3個檔案
分別是代碼、正常圖、毀損圖
有誰可以幫忙測試一下嗎
版本是Python 3.6.8
if ext == 'jpg' or ext == 'png':
try:
img = None
img = Image.open(pic_file)
img.load()
except Exception as e:
if(img):
img.close() #要關閉才能刪除
print(pic_file)
os.remove(pic_file)#刪除檔案
原本還想說試過了沒用
結果成功了
我想問一下
img = None
if(img):
分別有什麼用意嗎
如果 pic_file 無法被 Image.open(pic_file) 開啟,就不用 close 了。
我只是想確認那個 Exception 是因為 open 還是 load 造成。
看報錯應該是.load()的關係 不清楚...
img = None感覺是將變數歸零?
if(img):是怎麼成立條件的啊 印象中if都是這樣 if a>b:有數學符號
這兩條刪除好像也能運作
if 裡面放的其實是 布林值
try / catch ?
什麼意思
那裡是指當圖片讀取失敗就打印路徑並刪除
但是現在不知道為什麼無法刪除了
#os.remove(pic_file)#刪除檔案
上面這行 #os.rmove(...) 開頭是#就是整列註解了怎麼會執行?
改成下列這樣就會執行
os.remove(pic_file)#刪除檔案
所以有抓到什麼錯誤訊息嗎?
不確定 只知道他把應該要刪除檔案的那一刪註解掉了
Python裡面井字號在最左側跟 JS的 //是一樣的意思
我懂你的意思了,
你是要檢查圖片能不能正常載入,
如果不能就刪掉,
但是你將刪除檔案那行註解,
那怎麼可能執行呢?
註解是測試時避免誤刪
在測試刪除功能時是會刪除#的
D:\long\Desktop\test\image (2).jpg
Traceback (most recent call last):
File "D:\long\Desktop\test\8.py", line 42, in <module>
img.load()
File "C:\Users\long\AppData\Local\Programs\Python\Python36\lib\site-packages\PIL\ImageFile.py", line 249, in load
"(%d bytes not processed)" % len(b)
OSError: image file is truncated (79 bytes not processed)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\long\Desktop\test\8.py", line 47, in <module>
os.remove(pic_file)#刪除檔案
PermissionError: [WinError 32] 程序無法存取檔案,因為檔案正由另一個程序使用。: 'D:\\long\\Desktop\\test\\image (2).jpg'
他指的另一個程序就是他自己
但我不懂為什麼之前沒這個問題
假設您的程式沒錯
那麼...
檔案/資料夾 有權限進行刪除嗎?
路徑有變嗎?
軟體設定的檔案副檔名一樣是 png或jpg ?