对比文件内容是否相同
专栏:ExASIC Oct. 27, 2024, 10:22 a.m. 24 阅读
对比文件内容是否相同

我们在仿真时,仿真器,比如VCS,会根据文件日期有没有更新,来递增式编译。如果我们总是把testcase或者include文件覆盖过来,就会导致不必要的重编译。因为copy文件时,即使文件内容相同,文件日期也会更新。

那么我们需要对比两个文件内容是否相同,来决定要不要copy文件。在Linux里有命令diff -q file1 file2可以输出文件是否相同。但是在python里怎么实现呢?

文件md5

有一种方法就是计算文件的摘要,比如md5、SHA1、SHA256等。由于md5算法简单、计算速度快,因此我们用md5来实现。

md5是基于字符串的二进制形式进行计算。所以我们需要先读出文件,拼接成字符串。

import hashlib

def file_md5_calc(f):
    md5 = hashlib.md5()
    txt = ''.join(open(f).readlines())
    md5.update(txt.encode("utf8"))
    return md5.hexdigest()  

对比两个文件的md5

分别计算两个文件的md5,返回True或False。

def file_eq(f1, f2):
    if file_md5_calc(f1) == file_md5_calc(f2):
        return True
    else:
        return False

可改进的地方

  1. 先判断文件大小,如果大小不一致,两个文件肯定不一样。

  2. 对于大文件可以分成几段,分次计算md5。一旦md5不相同,后面的就不再需要计算。

感谢阅读,更多文章点击这里:【专栏:ExASIC】
最新20篇 开设专栏