2012-04-17 62 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