文件比较的逻辑

mRt*_*mRt 5 algorithm comparison file

我试图编写一个用于文件比较的程序。例如:

文件1

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

文件2

1
2
@
3
4
5
Run Code Online (Sandbox Code Playgroud)

如果我逐行执行,我会得到:

1 == 1; 
2 == 2;
3 != @;
4 != 3;
5 != 4;
  != 5;
Run Code Online (Sandbox Code Playgroud)

但是,事实是这些文件之间的唯一区别是@。我想要得到这样的东西:

1 == 1;
2 == 2;
  != @;
3 == 3;
4 == 4;
5 == 5;
Run Code Online (Sandbox Code Playgroud)

哪种方法最好?无需使用任何外部应用程序,例如 diff、fc 等。

Ned*_*Ned 1

Python 有一个非常方便的用于比较序列的库,称为difflib。底层的 SequenceMatcher 类采用两个 python 序列,并为您提供(除其他外)一系列操作码,告诉您如何从第一个序列到第二个序列(即差异)。这些形式如下:

  • 将此块替换为该块
  • 插入一个块
  • 删除一个块
  • 复制一个块(称为“等于”)

这些参考块通过给原始序列提供索引来实现。这可以应用于文件中的行或字符串中的字符或任何其他可以在 python 中转换为序列的内容。