python3 filecmp返回False,即使是艰难的文件也是相同的

时间:2018-03-22 15:40:03

标签: python python-3.x text file-comparison

我写了一个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()之间的差异是什么,我的函数没有检查?

1 个答案:

答案 0 :(得分:-1)

根据filecmp.cmp()的{​​{3}},默认情况下它将执行浅表比较。这意味着它将检查两个文件之间的documentation签名是否相同。其中包括所有者的UID,大小等。

即使文件的内容相同,但某些os.stat()的详细信息也可能不相同,这就是为什么在比较文件时会得到错误的原因。

要进行与使用filecmp.cmp()进行的功能相似的比较,可以将shallow标志设置为False。这将导致它实际上比较文件的内容,而不是它们的签名:

filecmp.cmp(f1, f2, shallow=False)