0
當我將一行添加到文件的中間時,以下所有行的編號都會增加。我如何知道兩個相似文件的行等價?
是否有一個實用程序生成兩個文件之間的等效行號列表?
輸出會是這樣的:
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)
有點更具體。你是否需要將一個庫嵌入到另一個框架(哪種技術?)或者只是一個工具來查看它(像KDiff這樣的一些diff工具?)? 有點天真:合併兩個文件並輸出不止一次出現的所有行。 – Adrian
輸出行號等效的單個類似unix的實用程序會很好。最後,我想檢查兩個不同文件版本中的靜態工具發現的錯誤是否相同,但是當插入或刪除行時,我會一直碰到行號差異。 – Penz
將兩個文件「cat」組合成一個並將「uniq」重複出來的組合可以完成這項工作。 我沒有檢查它,但它可以像這樣'cat file1>結果; cat file2 >>結果; uniq -d結果「 – Adrian