文件比较的逻辑
问题描述:
我试图编写文件比较的程序。例如:文件比较的逻辑
文件1
1
2
3
4
5
文件2
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等
答
Python有一个名为difflib序列比较一个非常方便的图书馆。底层的SequenceMatcher类有两个python序列,并给你(除其他外)一系列操作码,告诉你如何从第一个序列到第二个序列(即差异)。这些是以下形式的:
- 替换一个
- 该块插入块
- 删除块
- 复制一个块(称为“等于”)
这些参考通过给原始序列赋予索引块。这可以应用于文件中的行或字符串中的字符或其他任何可以在python中变为序列的其他内容。
答
如果不写程序来学习一些有关DIFF算法,但只是寻找一个解决方案,你应该尝试diff-match-patch。它包含不同编程语言(cpp,c#,java,javascript,python)中diff和patch算法的实现。
我想它的Java版本和它的工作就像一个魅力。
答
有点过时的,我想:)但我碰到这个职位来是因为我一直在寻找对同一问题的帮助:我有两个文件,我肩并肩显示,我必须标记线是不匹配红色。但是,由于1)订单并不重要,2)每行只能保证只出现一次(文本是一个带有定义的许可证文件,逐行),所以矿区有一点特殊情况。
原来做的最简单的方法只是使这两个文件,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中是否有对应的行。如果是这样,请删除两者。你留下的只是差异,你可以很容易地在原文中标出这些行。
非常容易,不包括图书馆。只是我的两美分...
了解和while – 2009-11-12 12:47:10