我怎么知道两个相似文件的行等价?

时间:2012-12-20 13:17:57

标签: diff dynamic-programming utility

当我在文件中间添加一行时,所有后续行的编号都会增加。

是否有一个实用程序可以生成两个文件之间的等效行号列表?

输出类似于:

1 1
2 2
3 4 (line added)
4 5

可以通过类似于diff算法的方式使用动态编程来创建这样的实用程序。看似有用,还没有完成?

1 个答案:

答案 0 :(得分:0)

我发现使用python的difflib非常容易:

import difflib

def seq_equivs(s1, s2):
    equiv = []
    s = difflib.SequenceMatcher(a=s1, b=s2)
    for m in s.get_matching_blocks():
        if m[2] == 0:
            break
        for n in range(1, 1+m[2]):
            equiv.append((m[0]+n, m[1]+n))
    return equiv

使用示例:

f1 = open('file1.txt').read().split('\n')
f2 = open('file2.txt').read().split('\n')

for equivs in seq_equivs(f1, f2):
    print('%d %d' % equivs)