识别重复项的显而易见的工具是哈希表。除非您使用 大量 文件,否则可以执行以下 *** 作:
from collections import defaultdictfile_dict = defaultdict(list)for filename in files: file_dict[get_file_hash(filename)].append(filename)
在此过程结束时,
file_dict将包含每个唯一哈希的列表;当两个文件具有相同的哈希时,它们都将出现在该哈希的列表中。然后过滤字典以查找长度超过1的值列表,并比较文件以确保它们相同-
如下所示:
for duplicates in file_dict.values(): # file_dict.itervalues() in Python 2 if len(duplicates) > 1: # double-check reported duplicates and generate output
或这个:
duplicates = [files for files in file_dict.values() if len(files) > 1]
get_file_hash可以使用MD5;或者它可以像Ramchandra
Apte在上面的注释中建议的那样简单地获取文件的开头和结尾字节;或者它可以像上面评论中建议的那样简单地使用文件大小。不过,后两种策略中的每一种都更有可能产生误报。您可以将它们组合以减少误报率。
如果你有一个工作 非常
大量的文件,你可以使用一个更复杂的数据结构像一个布隆过滤器。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)