检查文件是否相等
在Python中,检查两个文件是否相等的最优雅的方法是什么呢?是用校验和(Checksum)吗?还是直接比较字节(Bytes)呢?我觉得文件的大小不会超过100-200MB。
6 个回答
4
好的,这个问题可能需要两个不同的回答。
如果你有很多文件需要比较,建议使用“校验和”(checksum)的方法,并为每个文件缓存它的校验和。为了确保准确性,之后再逐字节比较匹配的文件。
如果你只有两个文件,那就直接进行逐字节比较,因为无论如何你都需要读取文件来计算校验和。
在这两种情况下,可以先通过文件大小来快速检查它们是否不相等。
9
那filecmp
模块怎么样呢?它可以用很多不同的方法来比较文件,每种方法都有自己的优缺点。
更棒的是,它是Python标准库的一部分:
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