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

时间:2014-04-12 21:54:16

标签: python compare newline

我有两个文件。文件test.atest.b。在{1}上预先生成了test.atest.b由用户生成,可以在windows和unix机器上生成。

我无法使用filecmp.cmp('test01/test.a', 'test01/test.b'),因为它总是会返回false,这完全归功于不同的行结尾。

这有什么优雅的解决方案吗?如果没有,在比较之前更改unix文件的行结尾的最佳方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

假设这两个是文本文件,使用标准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(文件结束)时,readline()会返回''

答案 1 :(得分:0)

如果您在一个文件的第一行中找到了换行符,然后根据具体内容选择将该char的所有实例替换为其他文件使用的内容,那么您可以使用cmp,或不是,如果他们已经是相同的。我知道你说你正在处理大文件,所以也许这根本不合适。

但是,请查看此处有关检测文件中使用的换行符的信息 How can I detect DOS line breaks in a file?

这里关于搜索的效率和替换大字符串 Fastest Python method for search and replace on a large string

希望这有帮助,如果没有道歉