python查找指定具有相同内容文件的方法


Posted in Python onJune 28, 2015

本文实例讲述了python查找指定具有相同内容文件的方法。分享给大家供大家参考。具体如下:

python代码用于查找指定具有相同内容的文件,可以同时指定多个目录
调用方式:python doublesdetector.py c:\;d:\;e:\ > doubles.txt

# Hello, this script is written in Python - http://www.python.org
# doublesdetector.py 1.0p
import os, os.path, string, sys, sha
message = """
doublesdetector.py 1.0p
This script will search for files that are identical
(whatever their name/date/time).
 Syntax : python %s <directories>
   where <directories> is a directory or a list of directories
   separated by a semicolon (;)
Examples : python %s c:\windows
      python %s c:\;d:\;e:\ > doubles.txt
      python %s c:\program files > doubles.txt
This script is public domain. Feel free to reuse and tweak it.
The author of this script Sebastien SAUVAGE <sebsauvage at sebsauvage dot net>
http://sebsauvage.net/python/
""" % ((sys.argv[0], )*4)
def fileSHA ( filepath ) :
  """ Compute SHA (Secure Hash Algorythm) of a file.
    Input : filepath : full path and name of file (eg. 'c:\windows\emm386.exe')
    Output : string : contains the hexadecimal representation of the SHA of the file.
             returns '0' if file could not be read (file not found, no read rights...)
  """
  try:
    file = open(filepath,'rb')
    digest = sha.new()
    data = file.read(65536)
    while len(data) != 0:
      digest.update(data)
      data = file.read(65536)
    file.close()
  except:
    return '0'
  else:
    return digest.hexdigest()
def detectDoubles( directories ):
  fileslist = {}
  # Group all files by size (in the fileslist dictionnary)
  for directory in directories.split(';'):
    directory = os.path.abspath(directory)
    sys.stderr.write('Scanning directory '+directory+'...')
    os.path.walk(directory,callback,fileslist)
    sys.stderr.write('\n')
  sys.stderr.write('Comparing files...')
  # Remove keys (filesize) in the dictionnary which have only 1 file
  for (filesize,listoffiles) in fileslist.items():
    if len(listoffiles) == 1:
      del fileslist[filesize]
  # Now compute SHA of files that have the same size,
  # and group files by SHA (in the filessha dictionnary)
  filessha = {}
  while len(fileslist)>0:
    (filesize,listoffiles) = fileslist.popitem()
    for filepath in listoffiles:
      sys.stderr.write('.')
      sha = fileSHA(filepath)
      if filessha.has_key(sha):
        filessha[sha].append(filepath)
      else:
        filessha[sha] = [filepath]
  if filessha.has_key('0'):
    del filessha['0']
  # Remove keys (sha) in the dictionnary which have only 1 file
  for (sha,listoffiles) in filessha.items():
    if len(listoffiles) == 1:
      del filessha[sha]
  sys.stderr.write('\n')
  return filessha
def callback(fileslist,directory,files):
  sys.stderr.write('.')
  for fileName in files:
    filepath = os.path.join(directory,fileName)
    if os.path.isfile(filepath):
      filesize = os.stat(filepath)[6]
      if fileslist.has_key(filesize):
        fileslist[filesize].append(filepath)
      else:
        fileslist[filesize] = [filepath]
if len(sys.argv)>1 :
  doubles = detectDoubles(" ".join(sys.argv[1:]))
  print 'The following files are identical:'
  print '\n'.join(["----\n%s" % '\n'.join(doubles[filesha]) for filesha in doubles.keys()])
  print '----'
else:
  print message

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python实现kMeans算法
Dec 21 Python
Python实现控制台中的进度条功能代码
Dec 22 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
Python之csv文件从MySQL数据库导入导出的方法
Jun 21 Python
Python单元测试简单示例
Jul 03 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
python如何求解两数的最大公约数
Sep 27 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
python tkinter实现屏保程序
Jul 30 Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
Sep 29 Python
python中getaddrinfo()基本用法实例分析
Jun 28 #Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 #Python
分析用Python脚本关闭文件操作的机制
Jun 28 #Python
python实现linux下使用xcopy的方法
Jun 28 #Python
自动化Nginx服务器的反向代理的配置方法
Jun 28 #Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 #Python
在Python中使用zlib模块进行数据压缩的教程
Jun 26 #Python
You might like
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
jquery实现图片预加载
2015/12/25 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
python Celery定时任务的示例
2018/03/13 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
单位成立周年感言
2014/01/26 职场文书
男女朋友协议书
2014/04/23 职场文书
525心理活动总结
2014/07/04 职场文书
地方课程教学计划
2015/01/19 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
婚宴祝酒词大全
2015/08/10 职场文书