检查文件是否相等

5 投票
6 回答
11912 浏览
提问于 2025-04-16 07:37

在Python中,检查两个文件是否相等的最优雅的方法是什么呢?是用校验和(Checksum)吗?还是直接比较字节(Bytes)呢?我觉得文件的大小不会超过100-200MB。

6 个回答

4

好的,这个问题可能需要两个不同的回答。

如果你有很多文件需要比较,建议使用“校验和”(checksum)的方法,并为每个文件缓存它的校验和。为了确保准确性,之后再逐字节比较匹配的文件。

如果你只有两个文件,那就直接进行逐字节比较,因为无论如何你都需要读取文件来计算校验和。

在这两种情况下,可以先通过文件大小来快速检查它们是否不相等。

9

filecmp模块怎么样呢?它可以用很多不同的方法来比较文件,每种方法都有自己的优缺点。

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

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

7

使用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)

更新: 从Python 2.1开始,有一个filecmp模块,它正好能满足你的需求,并且还有比较文件夹的方法。我之前不知道这个模块,我自己也还在学习Python呢 :-)

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

撰写回答