處理同事爬取的圖片時,其因爬取過程中因圖片類型/網絡等問題,獲取到較大批次破損圖片,現需清除破損文件,並做簡要記錄.
要點:
在python中,可以使⽤imghdr模塊中的what()⽅法判斷圖⽚⽂件是否損壞,若⽂件損壞,則返回None,否則返回圖⽚⽂件的類型,如jpeg等。imgh 內容⻅: https://docs.python.org/3/library/imghdr.html
progressbar模塊,則可以展示代碼處理進度
os模塊用以本地文件夾及文件的相關操作
業務:
選取需處理圖片所在的文件夾(含其子文件),獲取圖片集,判斷文件類型,損壞(類型為 None),則刪除,並記錄到本地txt文件
代碼:
#!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "NYA" import os import imghdr from progressbar import ProgressBar """ imghdr what 類型判斷,去除損壞文件 """ path = '/home/lab/images' original_images = [] # 此處獲取文件夾下所有圖片的方式不適合大數據量下的處理 ''' for root, dirs, filenames in os.walk(path): for filename in filenames: original_images.append(os.path.join(root, filename)) ''' for file in os.listdir(path): file_path = os.path.join(path, file) original_images.append(file_path) original_images = sorted(original_images) print('totalNum:', len(original_images)) f = open('/home/lab/check_error.txt', 'wb') error_images = [] progress = ProgressBar() for filename in progress(original_images): check = imghdr.what(filename) if check == None: f.write(filename) f.write('\n') os.remove(filename) error_images.append(filename) print('errorFileNum:',len(error_images)) f.close()
