Python:比较两个行尾不同的文件
我有两个文件,一个是 test.a
,另一个是 test.b
。test.a
是在 Unix 机器上预先生成的,而 test.b
是用户生成的,可以在 Windows 和 Unix 机器上生成。
我不能使用 filecmp.cmp('test01/test.a', 'test01/test.b')
,因为它总是返回 false,这都是因为文件的换行符不同。
有没有什么好的解决办法?如果没有,比较之前,怎么才能把 Unix 文件的换行符改成合适的格式呢?
谢谢!
2 个回答
1
假设你先找到了一个文件第一行使用的换行符,然后根据这个换行符,决定把所有出现的这个符号替换成另一个文件使用的换行符,这样你就可以用 cmp
来比较它们,或者如果它们已经相同就不需要替换了。我知道你提到你在处理大文件,所以这可能不太适合。
不过,你可以看看这里关于如何检测文件中使用的换行符的内容:如何检测文件中的DOS换行符?
还有这里关于在大字符串中进行搜索和替换的效率:在大字符串中进行搜索和替换的最快Python方法
希望这些对你有帮助,如果没有的话很抱歉。
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,文件结束)时,readline()
会返回 ''
(空字符串)。