3

我在 Python 中使用 difflib,但在让输出看起来不错时遇到了一些困难。出于某种奇怪的原因,difflib 在每个字符之前添加了一个空格。例如,我有一个如下所示的文件 (textfile01.txt):

测试没有意义的文本

和 textfile02.txt

测试没有意义的文本

但看起来不错

这是我尝试完成比较的一个小代码示例:

import difflib

handle01 = open(text01.txt , 'r')
handle02 = open(text02.txt , 'r')

d = difflib.ndiff( handle01.read() , handle02.read() )
print "".join(list(diff))

然后,我得到这个丑陋的输出,看起来……很奇怪:

testtextwhichhasnomea nin g-

- b- u- t- - l- o- o- k- s- - n- i- c- e

如您所见,输出看起来很糟糕。我一直在关注我在网上找到的基本 difflib 教程,根据这些教程,输出应该看起来完全不同。我不知道我做错了什么。有任何想法吗?

4

1 回答 1

8

difflib.ndiff比较字符串列表,但您将字符串传递给它们 - 字符串实际上是一个字符列表。因此,该函数逐个字符地比较字符串。

>>> list(difflib.ndiff("test", "testa"))
['  t', '  e', '  s', '  t', '+ a']

(从字面上看,您可以通过在列表中添加元素来从列表["t", "e", "s", "t"]转到列表。["t", "e", "s", "t", "a"]["a"]

您想更改read()为,readlines()以便可以按行方式比较这两个文件,这可能是您所期望的。

您还想更改"".join(...为以在屏幕上"\n".join(...获得类似diff的输出。

>>> list(difflib.ndiff(["test"], ["testa"]))
['- test', '+ testa', '?     +\n']
>>> print "\n".join(_)
- test
+ testa
?     +

(这里 difflib 非常好,并标记了在行中添加字符的确切位置?。)

于 2015-01-16T23:38:15.733 回答