python删除文件夹下相同文件和无法打开的图片

前天不小心把硬盘格式化了,丢了好多照片,后来用Recuva这款软件成功把文件恢复过来,可是恢复的文件中有好多重复的文件和无法打开的图片,所以写了两个python的小程序用来解决这个问题

删除相同文件:

#coding=utf-8

import os
import os.path
import Image
import hashlib

def get_md5(filename):
  m = hashlib.md5()
  mfile = open(filename, "rb")
  m.update(mfile.read())
  mfile.close()
  md5_value = m.hexdigest()
  return md5_value

if __name__ == '__main__':
  ipath = "E:\\20161019_photo"
  uipath = unicode(ipath, "utf8")

  for parent, dirnames, filenames in os.walk(uipath):
    md5_list = []
    #for dirname in dirnames: # 输出文件夹信息
      #print "parent is:" + parent
      #print "dirname is: " + dirname
    for filename in filenames:
      #print "parent is :" + parent
      #print "filename is:" + filename
      #print "md5_list is : "

      if(get_md5(os.path.join(parent, filename)) in md5_list):
        os.remove(os.path.join(parent, filename))
      else:
        md5_list.append(get_md5(os.path.join(parent, filename)))
      #print md5_list
      #md5 = []

删除无法打开文件:

#coding=utf-8

import os
import os.path
import Image
import hashlib

def get_md5(filename):
  m = hashlib.md5()
  mfile = open(filename, "rb")
  m.update(mfile.read())
  mfile.close()
  md5_value = m.hexdigest()
  return md5_value

if __name__ == '__main__':
  ipath = "E:\\20161019_photo"
  uipath = unicode(ipath, "utf8")
  for parent, dirnames, filenames in os.walk(uipath):
    for filename in filenames:
      name ,ext = os.path.splitext(filename)
      if((ext == ".png") or (ext == ".tif") or (ext == ".gif")):
        os.remove(os.path.join(parent, filename))
      else:
        if(ext == ".jpg"):
          try:
            fp = open(os.path.join(parent, filename), 'rb')
            img = Image.open(fp)
          except:
            fp.close()
            os.remove(os.path.join(parent, filename))
          else:
            continue

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python实现的删除重复文件或图片功能示例【去重】

    本文实例讲述了Python实现的删除重复文件或图片功能.分享给大家供大家参考,具体如下: 通过python爬虫或其他方式保存的图片文件通常包含一些重复的图片或文件, 通过下面的python代码可以将重复的文件删除以达到去重的目的.其中,文件目录结构如下图: # /usr/bin/env python # -*- coding:utf-8 -*- # 运行的代码文件要放到删除重复的文件或图片所包含的目录中 import os import hashlib def filecount(): file

  • python查找重复图片并删除(图片去重)

    本文实例为大家分享了python查找重复图片并删除的具体代码,供大家参考,具体内容如下 和网络爬虫配套的,也可单独使用,从网上爬下来的图片重复太多,代码支持识别不同尺寸大小一致的图片,并把重复的图片删除,只保留第一份. # -*- coding: utf-8 -*- import cv2 import numpy as np import os,sys,types def cmpandremove2(path): dirs = os.listdir(path) dirs.sort() if le

  • 删除目录下相同文件的python代码(逐级优化)

    这两天闲来无事在百度上淘了点图片,不多,也就几万张吧,其中有不少美女图片奥!哈哈!这里暂且不说图片是怎么获得的,咱聊聊得到图片以后发生的事. 遇到的第一个问题就是有些图片没有后缀名.在windows下,没有后缀名的文件是不能正确被识别的,没有预览,打开时还要选择打开方式,费劲!这个问题比较容易解决,给每个图片加上后缀名就是了.没有后缀名的图片也不多,不到1000张吧,一张一张地改很麻烦,还好我是学计算机的,上午写了个程序批量修改http://www.jb51.net/article/30400.

  • python判断图片宽度和高度后删除图片的方法

    本文实例讲述了python判断图片宽度和高度后删除图片的方法.分享给大家供大家参考.具体分析如下: Image对象有open方法却没有close方法,如果打开图片,判断图片高度和宽度,判断完成后希望删除或者给图片改名,是无法操作的,这段代码可以解决这个问题,注意open函数打开图片文件要使用二进制方式,及参数使用'rb',有的文章给出的只有个'r'参数,Image是无法open的 import os import Image fileName = 'c:/py/jb51.jpg' fp = op

  • java实现读取、删除文件夹下的文件

    java实现读取.删除文件夹下的文件 package test.com; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; public class ReadFile { public ReadFile() { } /** * 读取某个文件夹下的所有文件 */ public static boolean readfile(String filepath) throws Fi

  • Python如何import文件夹下的文件(实现方法)

    Python的import包含文件功能就跟PHP的include类似,但更确切的说应该更像是PHP中的require,因为Python里的import只要目标不存在就报错程序无法往下执行.要包含目录里的文件,PHP中只需要给对路径就OK.Python中则不同,下面来看看这个例子. 目录结构: a.py 要 import dir目录下的 b.py 文件.a.py代码如下: # coding=utf-8 "import dir 目录下的 b.py 文件" import dir.b prin

  • Java实现的模糊匹配某文件夹下的文件并删除功能示例

    本文实例讲述了Java实现的模糊匹配某文件夹下的文件并删除功能.分享给大家供大家参考,具体如下: package com.wyebd.gis; import java.io.File; /** * @Title: DelFiles.java * @Package com.wyebd.gis * @Description: * @author lisr * @date Mar 7, 2012 5:36:03 PM * @version V1.0 */ public class DelFiles {

  • python 获取指定文件夹下所有文件名称并写入列表的实例

    如下所示: import os import os.path rootdir = "./pic_data" file_object = open('train_list.txt','w') for parent,dirnames,filenames in os.walk(rootdir): for filename in filenames: print filename file_object.write(filename+ '\n') file_object.close() 在做深

  • python递归下载文件夹下所有文件

    最近想备份网站,但是php下载文件的大小是有大小限制的,而我也懒得装ftp再下载了,就想着暂时弄个二级域名站,然后用python(python3)的requests库直接下载网站根目录下的所有文件以及文件夹.(0-0就是这么任性) 1.安装requests库 pip install requests 2.下载文件夹下所有文件及文件夹 这里需要处理的地方主要是文件夹,这里我们判断出该链接是文件夹时,自动创建文件夹,并递归继续进行操作,否则判断该链接是文件,直接使用requests get方法下载,

  • python查找指定文件夹下所有文件并按修改时间倒序排列的方法

    代码如下: import os, glob, time def search_all_files_return_by_time_reversed(path, reverse=True): return sorted(glob.glob(os.path.join(path, '*')), key=lambda x: time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getctime(x))), reverse=revers

  • python2.7读取文件夹下所有文件名称及内容的方法

    最近稍稍有点空闲时间,于是重新温习了一下之前学习过的python基础.废话不多说,记录一下自己的所得. 首先,安装什么的不在本人的温习范围,另,本人使用的是windows下的python2.7版本,且本人相对来说只是小白,各位看官勿喷哈. python,本身来说是一门高级编程语言,有句话怎么说来着,越是高级的程序越简单,这几句话在表面来说是正确的.python它入门简单,有基础的学起来很快就能有简单的应用,但是在非常高的抽象计算中,高级的python程序设计也是非常难学的.我之所以学它,单纯的是

  • C++遍历文件夹下所有文件的多种方法

    为数不多的好用的代码,遍历文件夹获取所有子文件名,"filespec"可用通配符"*?".注意如果用相对路径的话,获取所有文件名后应再调用SetInitDir将初始目录改为当前目录,否则中间生成的文件都会放在之前的"InitDir"内. C/C++遍历文件夹感觉真是很不好用,建议还是使用C/C++做单任务处理,然后通过脚本语言实现遍历比较合理. CBrowseDir.h #include <io.h> #include <std

  • PHP实现批量重命名某个文件夹下所有文件的方法

    本文实例讲述了PHP实现批量重命名某个文件夹下所有文件的方法.分享给大家供大家参考,具体如下: 自己手动这样一个个的重命名,累啊.所以还是偷懒一下. 我重命名的规则是把所有有空格的全部替换成"_",然后再后面加一个"_s". <?php $paths = "C://Documents and Settings//sk//Desktop//s//"; $d = dir($paths); while (false !== ($entry = $

  • php获得文件夹下所有文件的递归算法的简单实例

    如下所示: function my_scandir($dir) { $files=array(); if(is_dir($dir)) { if($handle=opendir($dir)) { while(($file=readdir($handle))!==false) { if($file!="." && $file!="..") { if(is_dir($dir."/".$file)) { $files[$file]=my_

随机推荐