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()