香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

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


时间:2021-12-08 14:52 作者:admin


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

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

# Hello, this script is written in Python - http://www.python.org# doublesdetector.py 1.0pimport os, os.path, string, sys, shamessage = """doublesdetector.py 1.0pThis 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.txtThis 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 filesshadef 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程序设计有所帮助。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)