检查文件是否相等

2024-04-19 22:44:42 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,检查文件是否相等的最优雅的方法是什么? 校验和?字节比较?认为文件不会超过100-200 MB


Tags: 文件方法字节mb校验
3条回答

使用hashlib获取每个文件的md5,并比较结果。

#! /bin/env python
import hashlib
def filemd5(filename, block_size=2**20):
    f = open(filename)
    md5 = hashlib.md5()
    while True:
        data = f.read(block_size)
        if not data:
            break
        md5.update(data)
    f.close()
    return md5.digest()

if __name__ == "__main__":
    a = filemd5('/home/neo/todo')
    b = filemd5('/home/neo/todo2')
    print(a == b)

更新:从Python2.1开始,有一个filecmp module可以满足您的需要,并且有方法来比较目录。我从来不知道这个模块,我自己还在学习Python:—)

>>> import filecmp
>>> filecmp.cmp('undoc.rst', 'undoc.rst')
True
>>> filecmp.cmp('undoc.rst', 'index.rst')
False

那么filecmp模块呢?它可以用多种不同的方式进行文件比较,并有不同的折衷方案。

更好的是,它是标准库的一部分:

http://docs.python.org/library/filecmp.html

好吧,这可能需要两个不同的答案。

如果有许多文件要比较,请选择校验和并缓存每个文件的校验和。当然,之后要逐字节比较匹配的文件。

如果只有两个文件,直接进行字节比较,因为无论如何都必须读取该文件才能计算校验和。

在这两种情况下,使用文件大小作为检查不平等的早期方法。

相关问题 更多 >