所以我需要比较两个大型数据文件集,特别是音频文件,以查看是否存在重叠。每个数据集都有50,000多个文件。所以我做的是为python创建一个主文件列表来读取,然后我的脚本打开每个文件,在文件上运行哈希并将其添加到set()。然后我可以看出这两组是否相交。相当简单,虽然计算时间很长但不关心这个问题。
现在,为了测试我的脚本,我决定在我的本地计算机上的两个不同位置复制两个带有音频的文件夹并运行我的脚本,看看是否可以了解这两个文件夹是相同的。我的代码:
hasher = hashlib.md5()
with open("/Users/tcrha/Desktop/Music/hashmaster.txt") as inFile:
for line in inFile:
nline = line.strip('\n')
print nline
with open(nline) as handle:
buf = handle.read()
hasher.update(buf)
print hasher.hexdigest()
with open("/Users/tcrha/Downloads/Music/hashmaster.txt") as inFile:
for line in inFile:
nline = line.strip('\n')
print nline
with open(nline) as handle:
buf = handle.read()
hasher.update(buf)
print hasher.hexdigest()
输出:
/Users/tcrha/Desktop/Music/Voodoo Glow Skulls/Band Geek Mafia/04 They Always Come Back.mp3
61a89ad11775654a0c469973bc3afc4a
/Users/tcrha/Downloads/Music/Voodoo Glow Skulls/Band Geek Mafia/04 They Always Come Back.mp3
ba5cbe0137dcebebd344942196e2fd5a
正如你可以看到两个哈希值不同,甚至认为它们是同一个文件。现在当我在每个上运行MD5命令时,我收到了正确的输出。
MD5 (/Users/tcrha/Desktop/Music/Voodoo Glow Skulls/Band Geek Mafia/04 They Always Come Back.mp3) =
61a89ad11775654a0c469973bc3afc4a
MD5 (/Users/tcrha/Downloads/Music/Voodoo Glow Skulls/Band Geek Mafia/04 They Always Come Back.mp3) =
61a89ad11775654a0c469973bc3afc4a
匹配我脚本中第一个代码块的输出。有什么我做错了。
答案 0 :(得分:2)
您在程序顶部定义hasher
一次,然后使用它来散列两个文件。 hashlib.md5
实例计算已给出的所有字节流上的md5哈希值。因此,对于第二个文件,它返回hash(file1 + file2)
而不仅仅是hash(file2)
。
您应该为每个散列的新文件创建一个新的hashlib.md5
。
答案 1 :(得分:0)
您正在重复使用hasher
个对象。您需要为每个文件创建一个新文件。