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开发中module模块用法实例分析
Nov 12 Python
python3.4用函数操作mysql5.7数据库
Jun 23 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
简单实现python数独游戏
Mar 30 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
Python切图九宫格的实现方法
Oct 10 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
python 实现两个npy档案合并
Jul 01 Python
Python常用扩展插件使用教程解析
Nov 02 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 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中使用灵巧的体系结构
2006/10/09 PHP
PHP产生随机字符串函数
2006/12/06 PHP
加速XP搜索功能堪比vista
2007/03/22 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
js DOM模型操作
2009/12/28 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Python中psutil的介绍与用法
2019/05/02 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
教师旷工检讨书
2014/01/18 职场文书
2014春晚主持词
2014/03/25 职场文书
专业技术职务聘任书
2014/03/29 职场文书
公司节能减排倡议书
2014/05/14 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
学术会议开幕词
2016/03/03 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python