我正在尝试编写一个用于文件比较的程序。例如:
文件1
1
2
3
4
5
file2的
1
2
@
3
4
5
如果我逐行进行,我会得到:
1 == 1;
2 == 2;
3 != @;
4 != 3;
5 != 4;
!= 5;
但事实是,文件之间的唯一区别是@。我想得到这样的东西:
1 == 1;
2 == 2;
!= @;
3 == 3;
4 == 4;
5 == 5;
哪种方法最好?不使用任何外部应用程序,如diff,fc等。
答案 0 :(得分:2)
我想知道Levenshtein Distance在这种情况下是否会帮助你。它会告诉你两个文件有多相似,但我不知道你是否可以归零@。还有待观察的东西。
答案 1 :(得分:1)
我相信你要找的是2个字符串之间的距离,也许this可以帮助你。
答案 2 :(得分:1)
Python有一个非常方便的库,用于比较名为difflib的序列。底层的SequenceMatcher类接受两个python序列,并为您提供一系列操作码,告诉您如何从第一个序列到第二个序列(即差异)。它们的形式如下:
这些参考块通过将索引提供给原始序列。这可以应用于文件中的行或字符串中的字符或其他任何可以在python中变成序列的内容。
答案 3 :(得分:1)
如果您不是在编写程序来学习差异算法,而只是寻找解决方案,那么您应该尝试diff-match-patch。它包含不同编程语言中的diff和patch算法的实现(cpp,c#,java,javascript,python)。
我尝试了它的java版本,它就像一个魅力。
答案 4 :(得分:1)
有点过时了,我想:)但是我遇到了这个帖子,因为我正在寻找相同问题的帮助:我有两个文件,我并排显示,我必须标记出来的线条红色匹配。
我的有点特殊情况,因为1)订单并不重要,2)每行保证只发生一次(文本是带有定义的许可文件,逐行)。 / p>
事实证明,最简单的方法就是制作两个文件ls1和ls2的列表,并执行以下操作(伪代码):
i = 0;
while (i < ls1.count) {
n = ls2.find(ls1[i]);
if (n >= 0) {
// found match in ls2
ls1.Delete(i);
ls2.Delete(n);
} else
i++;
}
解释,对于每一行是ls1,看看ls2中是否有对应的行。如果是,请删除两者。您剩下的只是差异,您可以轻松地在原始文本中标记这些行。
非常简单,不包含任何库。只是我的两分钱......