我有两个文件。文件test.a
和test.b
。在{1}上预先生成了test.a
。 test.b
由用户生成,可以在windows和unix机器上生成。
我无法使用filecmp.cmp('test01/test.a', 'test01/test.b')
,因为它总是会返回false,这完全归功于不同的行结尾。
这有什么优雅的解决方案吗?如果没有,在比较之前更改unix文件的行结尾的最佳方法是什么?
谢谢!
答案 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
希望这有帮助,如果没有道歉