可能重复:
Finding duplicate files and removing them.
In Python, is there a concise way of comparing whether the contents of two text files are the same?查看两个文件在蟒蛇相同内容
是什么,看看两个文件是相同的内容,逐Python的最简单的方法。
我可以做的一件事是每个文件的MD5和比较。有没有更好的办法?
可能重复:
Finding duplicate files and removing them.
In Python, is there a concise way of comparing whether the contents of two text files are the same?查看两个文件在蟒蛇相同内容
是什么,看看两个文件是相同的内容,逐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
速度的考虑: 通常,如果只有两个文件都进行比较,哈希他们,如果比较高效地完成起来会更慢,而不是简单的逐字节的比较。例如下面的代码尝试时间散列vs逐字节
声明:这不是计时或比较两个算法的最佳方式。并且需要改进,但它确实给出了粗略的想法。如果你认为应该改进,请告诉我,我会改变它。
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
没理由当一个简单的逐字节比较工作时,做一个昂贵的散列。 +1 for filecmp – 2009-07-02 04:58:53
我不知道,如果你想查找重复文件或只是比较两个单个文件。如果后者,上述方法(filecmp)更好,如果前者,下面的方法更好。
这里有很多重复文件检测问题。假设他们不是非常小,性能是重要的,你可以
这里是Python implementations一个答案(我更喜欢一个由nosklo,BTW)
这是http://stackoverflow.com/questions/的副本254350 – pufferfish 2009-07-02 12:28:43