我写了一个python 3脚本,它检查C代码的2个输出文本文件是否相同。 1个文件是“想要的”输出文本文件,我作为带有赋值的输入/输出文件的示例,另一个是我的C代码作为输出给出的输出文件。
import filecmp
f1="out1.txt" #the output file i got from the assignment as example
f2="myout1.txt" #the output file my c code gave for the same input file of f1
f2_copy="myout1 (copy).txt" #copy of f2
print(filecmp.cmp(f1,f2))
print(filecmp.cmp(f2,f2_copy))
我得到了输出:
>>>False
>>>True
即使文件是identical,我也会得到False作为输出。 我得到True的唯一方法是当我复制文件然后执行filecmp.cmp ...
如果重要,我正在使用Ubunto和GCC获取输出文件......
感谢。
EDIT1: 我创建了一个函数,它读取每个文件的行并比较2个列表:
def textCompare(fl1,fl2):
file1 = open(fl1, 'r')
file2 = open(fl2, 'r')
lines1=file1.readlines()
lines2=file2.readlines()
f1.close()
f2.close()
if lines1 == lines2:
return True
else:
return False
正如我所知,为了我的目的,它工作得很好......我的问题是这个函数和filecmp.cmp()之间的差异是什么,我的函数没有检查?
答案 0 :(得分:-1)
根据filecmp.cmp()
的{{3}},默认情况下它将执行浅表比较。这意味着它将检查两个文件之间的documentation签名是否相同。其中包括所有者的UID,大小等。
即使文件的内容相同,但某些os.stat()
的详细信息也可能不相同,这就是为什么在比较文件时会得到错误的原因。
要进行与使用filecmp.cmp()
进行的功能相似的比较,可以将shallow
标志设置为False
。这将导致它实际上比较文件的内容,而不是它们的签名:
filecmp.cmp(f1, f2, shallow=False)