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中获取网页状态码的两个方法
Nov 03 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
python进行文件对比的方法
Dec 24 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
Apr 09 Python
python调用自定义函数的实例操作
Jun 26 Python
解析python实现Lasso回归
Sep 11 Python
Python argparse模块应用实例解析
Nov 15 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
AUC计算方法与Python实现代码
Feb 28 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
Python实现随机爬山算法
Jan 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语法(3)
2006/10/09 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
js 内存释放问题
2010/04/25 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
微信小程序组件传值图示过程详解
2019/07/31 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
Python松散正则表达式用法分析
2016/04/29 Python
python实现人脸识别代码
2017/11/08 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
python创建文本文件的简单方法
2020/08/30 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
linux面试题参考答案(5)
2016/11/05 面试题
写给爸爸的道歉信
2014/01/15 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
七夕情人节问候语
2015/11/11 职场文书