2

我有一个程序,它比较两个文本文件并将差异打印到一个新的文本文件,但我想修改它,所以它只打印出第一个差异发生的行和列。这是我到目前为止所拥有的:

f1 = open("file1.txt", "r")
f2 = open("file2.txt", "r")

fileOne = f1.readlines()
fileTwo = f2.readlines()

f1.close()
f2.close()
outFile = open("file3.txt", "w")
x = 0

for i in fileOne:
   if i != fileTwo[x]:
      outFile.write(i+" <> "+fileTwo[x])
   x += 1
 outFile.close()

谢谢。

4

3 回答 3

1

break在第一场比赛之后。

for i in fileOne:
    if i != fileTwo[x]:
        outFile.write(i+" <> "+fileTwo[x])
        break
    x += 1
于 2013-11-04T17:12:05.557 回答
0

使用enumerateitertools。此解决方案一次仅将两行(每行一个)加载到内存中。

from itertools import izip, dropwhile, izip_longest
with open("abc1") as f1, open("abc2") as f2:
    for i, (x, y) in enumerate(izip(f1, f2), start=1):
        if x != y:
            print "line number is", i
            column =next(dropwhile(lambda(i, c1, c2):c1==c2,
                         ((i, c1, c2) for i,(c1, c2) in enumerate(izip_longest(x, y)))))[0]
            print "column number is", column
            break
于 2013-11-04T17:34:08.087 回答
0
with open("file1.txt", "r") as f1:
    lines1 = f1.readlines()

with open("file2.txt", "r") as f2:
    lines2 = f2.readlines()

bound = max(len(lines1), len(lines2))
for idx, line1, line2 in zip(xrange(bound), lines1, lines2):
    if line1 != line2:
        diff_line = idx
        break

bound = max(len(line1), len(line2))
for idx, c1, c2 in zip(xrange(bound), list(line1), list(line2)):
    if c1 != c2:
        diff_char = idx
        break

print "first difference is on line {0:g} and character {1:g}".format(diff_line, diff_char)
于 2013-11-04T17:18:22.363 回答