【问题标题】:Python : compare two files with different line endingsPython:比较具有不同行尾的两个文件
【发布时间】:2014-05-27 00:35:45
【问题描述】:

我有两个文件。文件test.atest.btest.a 是在 unix 机器上预先生成的。 test.b是用户生成的,可以在windows和unix机器上生成。

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

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

谢谢!

【问题讨论】:

    标签: python compare newline


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果您发现一个文件的第一行使用了哪个换行符,然后根据它是什么,选择用其他文件使用的任何字符替换该字符的所有实例,以便您可以使用cmp,或者不使用如果它们已经相同。我知道你说你正在处理大文件,所以也许这根本不适合。

      但是,请看这里关于文件中使用的换行符的检测 How can I detect DOS line breaks in a file?

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

      希望对你有帮助,如果没有,请见谅

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 2020-12-11
        • 2018-06-26
        • 2013-10-01
        • 1970-01-01
        • 2015-01-20
        • 2017-06-18
        相关资源
        最近更新 更多