Python学习 —— 批量删除错误图片、修改文件名以及删除重复图片

前言

  今天在研究爬取Pixiv上的排行榜图片,本来是打算爬自己关注的所有画师的作品的...但还是从简单一些的开始比较好,爬Pixiv的图片让我遇到了许多问题,第一个就是反爬虫机制,第二就是图片的格式处理...等等还有一些其他小问题。

主题

一、批量删除错误图片:

  因为代码的算法限制的原因,所以爬取的一些图片发生了错误,看着一张好看的图片,一张错误的图片混在一起很难受,于是写了一个脚本来进行批量删除错误的图片。

  代码如下:

import os

for name in range(1,150):
    with open('C:\\Users\\adimin\\Desktop\\Pixiv_Img\\{}.png' .format(str(name)), 'rb') as fp:
        data = fp.read()
    if(len(data) == 58):  # 查看一下错误图片的信息,看到错误图片的大小都是58byte,占用空间0KB
        os.remove('C:\\Users\\adimin\\Desktop\\Pixiv_Img\\{}.png' .format(str(name)))  # 移除文件
    else:
        pass

  代码没考虑太多,主要是为了直接的解决问题,所以,可以看出代码的针对性很高,但基本思路也就是这样,就是用到了os.remove方法。

 ----------update 2018-01-2017:06:33---------

import os
for name in range(1, count):
    try:
        with open('../{}.png'.format(str(name)), 'rb') as fp:
            data = fp.read()
        if (len(data) == 58):
            os.remove('../{}.png'.format(str(name)))
    except FileNotFoundError:
        try:
            with open('../{}.jpg'.format(str(name)), 'rb') as fp:
                data = fp.read()
            if (len(data) == 58):
                os.remove('../{}.jpg'.format(str(name)))
        except FileNotFoundError:
            continue

------------------------------------------------

二、批量修改文件名:

  前面删除了错误图片后,文件名就变得参差不齐了,看着也难受,所以,又写了一个脚本来修改图片名字。

  代码如下:

import os

new_name = 1
for name in range(1,199):
    # 异常处理
    try:
        with open('../{}.png' .format(str(name)), 'rb') as fp:
            pass
    except:
        pass
    else:
        os.renames('../{}.png'.format(str(name)),  # 修改文件名
                   '../{}.png'.format(str(new_name)))
        new_name += 1

 

-----------------update 2018-01-23 17:49:46-----------------

# 代码更新
import os

filename = 1
for name in range(start,end):
    try:
        os.renames('../{}.jpg'.format(str(name)),
                   '../{}.jpg'.format(str(filename)))
        filename += 1
    except:
        try:
            os.renames('../{}.png'.format(str(name)),
                       '../{}.png'.format(str(filename)))
            filename += 1
        except:
            continue

-------------------------------------------

  代码也很简单,重点就是用到了os.renames的方法。它的原型是:

renames(old:Union{bytes, str}, new:Union{bytes, str})

  还有一个os.rename()方法,这个方法是对某个路径的文件名进行修改。

三、删除重复图片:

  想了一下觉得其实删除重复图片用不上图像识别,当然图像识别是能解决问题的,但对于删除重复图片,可以简单、直接的读取图片的数据,然后用循环进行比较删除。

  代码如下:

----------------update 2018-01-23 16:07:22---------------

  经朋友提醒,用了python的字典数据类型来删除重复图片,思路是将图片数据作为key,对应文件名作为value,value如果存在,则说明图片重复,然后删除。(因为才学python没多久,不确定变量能不能装下那么长的字节...然而用了之后才发现的我的顾虑是多余的)

  代码如下:

import os

DataLirary = {}
for name in range(start,end):
    try:
        with open('../{}.png'.format(str(name)), 'rb') as fp:
            data = fp.read()
        dict2 = {data:str(name)}
        if data in DataLirary:
            os.remove('../{}.png'.format(DataLirary[data]))
        else:
            DataLirary.update(dict2)

    except FileNotFoundError:
        try:
            with open('../{}.jpg'.format(str(name)), 'rb') as fp:
                data = fp.read()
            dict2 = {data:str(name)}
            if data in DataLirary:
                os.remove('../{}.jpg'.format(DataLirary[data]))
            else:
                DataLirary.update(dict2) 
         except FileNotFoundError:
            continue
    finally:
        pass

  快了非常多,之前的比较想法太烂了...对于几千张的图片进行删除要花非常久的时间。

---------------------------------------

  总之...很简单的几个小程序。嘛...对解决自己的这个问题来说还是挺实用的。

 

转载于:https://www.cnblogs.com/darkchii/p/8319782.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值