在Python中比较两个文本文件

3
我希望在Python中比较两个测试文件(实际上它们是Windows注册表文件(.reg),但它们都是文本文件)。我想找到两个文件之间的所有差异,而不仅仅是第一行与第二个文件不同的内容。谢谢!

3
difflib 可能会引起兴趣。 - mensi
3个回答

2
f1 = open(filepath1)
f2 = open(filepath2)

lines = f2.readlines()
for i,line in enumerate(f1):
    if line != lines[i]:
        print "line", i, "is different:"
        print '\t', line
        print '\t', lines[i]
        print "\t differences in positions:", ', '.join(map(str, [c for c in range(len(line)) if line[c]!= lines[i][c]]))

希望这能帮到您。

如果f1中有一行额外的内容,它将报告该行之后的每一行都不同。逐行比较仅在文件大部分相同但存在某些行内差异时才有用。 - Bryan Oakley
我的问题是你所说的,我不希望这种情况发生。我只需要差异,而不仅仅是如果第一行不匹配所有下一行,则在屏幕上打印未匹配的行。 - user1229351

1

看一下http://docs.python.org/library/difflib.html

这是它的一个使用示例(虽然还有许多其他用例和输出格式):

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...     sys.stdout.write(line)   
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido

0

如果您只需要执行一两次,可以考虑使用Gnu32Diff。如果您已经安装了OS X或Linux,则可以使用vimdiff(又名vim -d,但是如果您已安装vim,则也会安装vimdiff命令),这很简单易用。


它应该是Python脚本,而不是预构建工具。 - user1229351

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