pythonファイルチェックツール、ファイルサイズとmd 5/sha 1値に基づく
1773 ワード
私のコンピュータの中の资料は比较的に乱れていて、いつも同じファイルがコピーして、大量の重複するファイルが存在して、多くの空间を占有して、だから1つの重さを调べるツールをしたいと思って、具体的なコードは以下の通りです
import hashlib
import sys
import os
def Usage(argv):
print("usage : {0} folder1 folder2".format(argv[0]))
def CalculateFileHash(file):
f = open(file, "rb")
content = f.read()
m = hashlib.md5()
#m = hashlib.sha1()
m.update(content)
s = m.hexdigest()
del m
f.close()
return s
class HashFile:
def __init__(self, file_path):
self.Load(file_path)
def Load(self, file_path):
self.file_ext = file_path[file_path.rfind("."):]
self.file_name = os.path.basename(file_path)
self.file_size = os.path.getsize(file_path)
self.hash_code = CalculateFileHash(file_path)
def Equal(self, other):
if self.file_size != other.file_size:
return 0
elif self.hash_code != other.hash_code:
return 0
else:
return 1
def FolderToDict(folder):
file_dict = {}
for root, dirs, files in os.walk(folder): #ignore subdirectories here
for file in files:
path=os.path.join(root, file)
file_dict[path] = HashFile(path)
return file_dict
def CompareTwoFolder(src, dst):
src_dict = FolderToDict(src)
dst_dict = FolderToDict(dst)
for skey, sval in src_dict.items():
for dkey, dval in dst_dict.items():
if sval.Equal(dval):
print('file "{0}" and "{1}" are identical'.format(skey, dkey))
#todo : delete one file here
break
if (len(sys.argv) < 3):
Usage(sys.argv)
sys.exit()
else:
CompareTwoFolder(sys.argv[1], sys.argv[2])
sys.exit()