栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

查看两个文件在python中是否具有相同的内容

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

查看两个文件在python中是否具有相同的内容

是的,我认为如果必须比较多个文件并存储哈希以供以后比较,则对文件进行哈希处理将是最好的方法。由于哈希可能会发生冲突,因此可能会根据用例进行逐字节比较。

通常,逐字节比较将是足够且高效的,哪个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 randomimport stringimport hashlibimport timedef getRandText(N):    return  "".join([random.choice(string.printable) for i in xrange(N)])N=1000000randText1 = 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 == hash2def cmpByteByByte(text1, text2):    return text1 == text2for cmpFunc in (cmpHash, cmpByteByByte):    st = time.time()    for i in range(10):        cmpFunc(randText1, randText2)    print cmpFunc.func_name,time.time()-st

输出是

cmpHash 0.234999895096cmpByteByByte 0.0


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638011.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号