如何使用Python的difflib来生成类似于Unix sdiff命令的两个文件的并排比较?

zml*_*zml 6 python unix tkinter difflib sdiff

我正在使用Python 2.6,我想创建一个简单的GUI,其中包含两个并排的文本窗格,比较两个文本文件(file1.txt和file2.txt).

我正在使用difflib,但我不清楚如何生成类似于sdiff Unix命令的结果.

为了再现一个侧方比较,我需要difflib返回两个变量file1_difffile2_diff,例如.

我还考虑过直接使用sdiff输出并解析它来分隔窗格,但事实证明并不像看起来那么容易......任何提示?

Het*_*ett -2

我尝试使用difflib.context_diff进行文件比较:

diff = difflib.context_diff(fromlines, tolines, fromfile='file1.txt', tofile='file2.txt')
sys.stdout.writelines(diff)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你的输出将是这样的:

*** file1.txt
--- file2.txt
***************
*** 1,6 ****
! aasdf
  qwer
  123
! poiu
! xzcv34
  xzcv
--- 1,6 ----
! asdf
  qwer
+ mnbv
  123
! cvnn
  xzcv
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您将能够轻松地分离每个文件差异,但我不确定您是否会对 context_diff 的输出感到满意。您还没有提到您使用 difflib 的方式。

  • 是的,我已经尝试过了,在我看来,获得类似结果的唯一方法是使用“HtmlDiff()”方法。输出看起来像[this](http://tinypic.com/r/opy43q/8)。在这种情况下,您可以将 html 输出写入该文件(该文件基本上是一个表),然后从该文件中获取内容。尽管您将如何展示它取决于您。你打算将结果输出到控制台(linux)还是在gui(windows或gtk)中显示它? (2认同)
  • 在这种情况下,我建议使用 [HtmlDiff ](https://docs.python.org/2/library/difflib.html#difflib.HtmlDiff),解析 html 结果(不需要编写列分隔逻辑,原因文件已经按列和行存储在表中),然后您可以使用结果在 GUI 控件中输出。抱歉,我没有 GUI 控件方面的经验,因此我无法在这方面为您提供帮助。如果您对 html 解析还有任何疑问,请告诉我。 (2认同)