2012-04-17 58 views
3

我想比较python中的两个测试文件(实际上它们是Windows注册表文件(.reg),但它们都是文本)。 即时通讯寻找两个文件之间的所有差异,而不仅仅是第一个不同于第二个文件的第一行。 由于事先比较python中的两个文本文件

+3

[difflib(HTTP://docs.python .org/library/difflib.html#module-difflib)可能很有趣 – mensi 2012-04-17 19:15:35

回答

1
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]])) 

希望这有助于

+0

如果你在f1中有一个额外的行,它会报告之后的每一行都是不同的。逐行比较只有在文件大部分相同时才有用,除了一些行内差异之外。 – 2012-04-17 23:20:18

+0

我的问题就是你说的,我不希望发生这种情况。我只需要区别不只是如果第一行不匹配屏幕上的下一行打印作为不匹配的行。 – user1229351 2012-04-18 03:45:08

0

如果您需要做的仅仅是一次或两次,你可以考虑使用Gnu32Diff。如果您安装了OS X或Linux,则可以使用vimdiff(也称为vim -d,但如果您安装了vim,它还会安装vimdiff命令),这非常简单易用。

+0

它应该是python script.not预编译工具 – user1229351 2012-04-18 05:32:54

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