Python:比较两个具有不同行尾的文件

11
我有两个文件,test.atest.b。其中test.a在Unix机器上预生成,test.b可以由用户在Windows和Unix机器上生成。
我不能使用filecmp.cmp('test01/test.a', 'test01/test.b') 因为它总是返回false,这要归咎于不同的行尾符。
是否有任何优雅的解决方案?如果没有,怎么样才能在比较之前更改Unix文件的行尾符呢?
谢谢!
2个回答

8

假设这两个是文本文件,使用标准的 open()readline() 函数应该可以工作,因为除非传入 b,否则它们会使用通用换行符(转换为 \n):

def cmp_lines(path_1, path_2):
    l1 = l2 = True
    with open(path_1, 'r') as f1, open(path_2, 'r') as f2:
        while l1 and l2:
            l1 = f1.readline()
            l2 = f2.readline()
            if l1 != l2:
                return False
    return True

该函数将逐行比较文件内容,一旦找到两行不匹配的内容就会返回False(同时由于使用了with语句块会关闭文件)。如果所有行都匹配,则返回True。所有换行符都自动转换为\n。请注意,当读取到EOF(End Of File)时,readline()会返回''


1
如果您找到了一个文件的第一行使用了哪个换行符,然后根据那个字符选择替换所有实例为另一个文件所使用的字符,这样您就可以使用cmp,或者如果它们已经相同,则不需要。我知道您说您正在处理大文件,因此也许这完全不适合。
但是,请查看有关检测文件中使用的换行符的信息 如何检测文件中的DOS换行符? 以及在大字符串上进行搜索和替换的效率问题,请参见此处 Python中最快的搜索和替换方法 希望这会有所帮助,如果没有,敬请谅解。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接