在Python中查看两个文件在内容方面是否相同的最简单方法是什么。
我可以做的一件事是对每个文件md5进行比较。有没有更好的办法?
是的,我认为如果必须比较多个文件并存储哈希以供以后比较,则对文件进行哈希处理将是最好的方法。由于哈希可能会发生冲突,因此可能会根据用例进行逐字节比较。
通常,逐字节比较将是足够且高效的,哪个filecmp模块也已经执行了其他操作。
参见http://docs.python.org/library/filecmp.html 例如
>>> import filecmp >>> filecmp.cmp('file1.txt', 'file1.txt') True >>> filecmp.cmp('file1.txt', 'file2.txt') False
速度方面的考虑: 通常,如果只需要比较两个文件,则对它们进行散列并进行比较会比较慢,而不是简单的逐字节比较(如果有效率的话)。例如,下面的代码尝试对哈希与字节逐时进行计时
免责声明:这不是计时或比较两种算法的最佳方法。需要改进,但确实给出了粗略的想法。如果您认为应该改进它,请告诉我,我将对其进行更改。
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
输出是
cmpHash 0.234999895096 cmpByteByByte 0.0