當前位置:
首頁 >
python源码用于查找指定具有相同内容的文件
發(fā)布時間:2025/3/20
19
豆豆
生活随笔
收集整理的這篇文章主要介紹了
python源码用于查找指定具有相同内容的文件
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
把開發(fā)過程中經(jīng)常用的內(nèi)容珍藏起來,下邊資料是關(guān)于python用于查找指定具有相同內(nèi)容的文件的代碼,應該能對碼農(nóng)有較大好處。?# doublesdetector.py 1.0p
import 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 directoriesseparated by a semicolon (;)Examples : python %s c:windowspython %s c:;d:;e: > doubles.txtpython %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>def fileSHA ( filepath ) :""" Compute SHA (Secure Hash Algorythm) of a file.Input : filepath : full path and name of file (eg. 'c:windowsemm386.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 filefor (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 filefor (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 復制代碼?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
轉(zhuǎn)載于:https://juejin.im/post/5cd8b7c3e51d453a69177ec7
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的python源码用于查找指定具有相同内容的文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android弹窗组件工作机制之Dial
- 下一篇: Tracer Druid 记录sql