基於Python清除破損圖片需求實現


  處理同事爬取的圖片時,其因爬取過程中因圖片類型/網絡等問題,獲取到較大批次破損圖片,現需清除破損文件,並做簡要記錄.

  要點:

  在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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM