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不带重复的全排列代码
Aug 13 Python
Python FTP操作类代码分享
May 13 Python
python对html代码进行escape编码的方法
May 04 Python
Python本地与全局命名空间用法实例
Jun 16 Python
详解Python pygame安装过程笔记
Jun 05 Python
Python实现带参数的用户验证功能装饰器示例
Dec 14 Python
Python多图片合并PDF的方法
Jan 03 Python
在python中画正态分布图像的实例
Jul 08 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
Apr 24 Python
python将dict中的unicode打印成中文实例
May 11 Python
Python 处理日期时间的Arrow库使用
Aug 18 Python
字典算法实现及操作 --python(实用)
Mar 31 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
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
php提取微信账单的有效信息
2018/10/01 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
python 远程统计文件代码分享
2015/05/14 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
python简单的三元一次方程求解实例
2020/04/02 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
《永远的白衣战士》教学反思
2014/04/25 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
生产现场禁烟通知
2015/04/23 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python