国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python查找指定具有相同內(nèi)容文件的方法

2019-11-25 17:15:44
字體:
供稿:網(wǎng)友

本文實例講述了python查找指定具有相同內(nèi)容文件的方法。分享給大家供大家參考。具體如下:

python代碼用于查找指定具有相同內(nèi)容的文件,可以同時指定多個目錄
調(diào)用方式: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程序設計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 巩留县| 孟州市| 云浮市| 北安市| 昌邑市| 德安县| 凤阳县| 晋城| 平乡县| 麻城市| 孟村| 桦川县| 松潘县| 民勤县| 大庆市| 建始县| 北海市| 金山区| 黔西县| 马山县| 孙吴县| 施秉县| 康保县| 灌云县| 东乡族自治县| 彩票| 洱源县| 尉氏县| 子洲县| 霍林郭勒市| 江北区| 凤冈县| 阳高县| 霍林郭勒市| 政和县| 张北县| 丰城市| 壶关县| 黄平县| 阿鲁科尔沁旗| 辽源市|