您好我一直在尝试比较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
现在它确实有效,但它返回的值似乎不正确。
任何建议或帮助将不胜感激
答案 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