我们在仿真时,仿真器,比如VCS,会根据文件日期有没有更新,来递增式编译。如果我们总是把testcase或者include文件覆盖过来,就会导致不必要的重编译。因为copy文件时,即使文件内容相同,文件日期也会更新。
那么我们需要对比两个文件内容是否相同,来决定要不要copy文件。在Linux里有命令diff -q file1 file2
可以输出文件是否相同。但是在python里怎么实现呢?
有一种方法就是计算文件的摘要,比如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,返回True或False。
def file_eq(f1, f2):
if file_md5_calc(f1) == file_md5_calc(f2):
return True
else:
return False