当我在文件中间添加一行时,以下所有行的编号都会增加。
是否有一个实用程序可以生成两个文件之间的等效行号列表?
输出将类似于:
1 1
2 2
3 4 (line added)
4 5
可以通过以类似于 diff 算法的方式使用动态编程来创建这样的实用程序。好像有用,还没做?
当我在文件中间添加一行时,以下所有行的编号都会增加。
是否有一个实用程序可以生成两个文件之间的等效行号列表?
输出将类似于:
1 1
2 2
3 4 (line added)
4 5
可以通过以类似于 diff 算法的方式使用动态编程来创建这样的实用程序。好像有用,还没做?
我发现使用 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)