比较python中的两个文本文件并计算差异

时间:2015-12-13 14:14:15

标签: python

您好我一直在尝试比较Python中的两个文本文件,基本上我想打开它们并且如果字符不同则一次比较一个字符将1添加到计数器然后显示该值。

这是我到目前为止所做的:

#!/usr/bin/env python

diff = 0

import random
import string
import sys

file_A = sys.argv[1]
file_B = sys.argv[2]

read_A=open(file_A,'r').read()
read_B=open(file_B,'r').read()

for a in read_A:
    for b in read_B:
        if a != b:
            diff = diff + 1
    return diff
break

print "No of Differences ",diff

现在它确实有效,但它返回的值似乎不正确。

任何建议或帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用difflib。它不需要任何额外的鸡蛋用于python,并且为跟踪各种差异检查提供了非常好的结果。差异检查的结果将是您期望检查相等性和近似匹配的结果。如果您允许对结果进行加权,这也很重要。

答案 1 :(得分:1)

循环当然不是pythonic方式。不使用任何外部库,您可以使用简单的列表解析来查找两个文件之间差异的实例:

如果订单很重要:

x=[i for i, j in zip(read_A, read_B) if i != j]
print len(x)

如果订单重要:

x=[i in read_B for i in read_A]
#Now count the instances where the comparison resulted in False
i = x.count(False)

答案 2 :(得分:1)

如果您想要逐个字符地比较两个字符串,最好将它们压缩。

所以,一旦你做到了这一点:

class Parent<T> {

    var data:T

    init(data:T) {
        self.data = data
    }
}

class Child: Parent<String> {
    init(data: Double) {
        super.init(data: "\(data)")
    }
}

let c = Child(data: 4)
print(c.dynamicType) // Child    :-)
你这样做:

read_A=open(file_A,'r').read()
read_B=open(file_B,'r').read()

如果您的文件非常大,您可能希望只逐个字符地阅读并使用for char_a, char_b in zip(read_A, read_B): if char_a != char_b: # something 代替izip ...

<强>顺便说一句...

您没有关闭文件。总是以这种方式访问​​文件是个好主意:

zip