Anu*_*yal 86
是的,我认为如果你必须比较几个文件和存储哈希值以便以后比较,那么散列文件将是最好的方法.由于散列可能发生冲突,因此可以根据用例进行逐字节比较.
通常逐字节比较将是充分和有效的,filecmp模块已经做了+其他事情.
请参阅http://docs.python.org/library/filecmp.html 例如
>>> import filecmp
>>> filecmp.cmp('file1.txt', 'file1.txt')
True
>>> filecmp.cmp('file1.txt', 'file2.txt')
False
Run Code Online (Sandbox Code Playgroud)
速度考虑: 通常如果只需要比较两个文件,那么对它们进行散列并比较它们会比较慢而不是简单的逐字节比较(如果有效地完成).例如,下面的代码尝试按字节逐个哈希
免责声明:这不是计时或比较两个算法的最佳方式.并且需要改进但它确实给出了粗略的想法.如果您认为应该改进,请告诉我我会改变它.
import random
import string
import hashlib
import time
def getRandText(N):
return "".join([random.choice(string.printable) for i in xrange(N)])
N=1000000
randText1 = getRandText(N)
randText2 = getRandText(N)
def cmpHash(text1, text2):
hash1 = hashlib.md5()
hash1.update(text1)
hash1 = hash1.hexdigest()
hash2 = hashlib.md5()
hash2.update(text2)
hash2 = hash2.hexdigest()
return hash1 == hash2
def cmpByteByByte(text1, text2):
return text1 == text2
for cmpFunc in (cmpHash, cmpByteByByte):
st = time.time()
for i in range(10):
cmpFunc(randText1, randText2)
print cmpFunc.func_name,time.time()-st
Run Code Online (Sandbox Code Playgroud)
而输出是
cmpHash 0.234999895096
cmpByteByByte 0.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77910 次 |
| 最近记录: |