difflib输出很奇怪,在每个字符上添加额外的空格

eri*_*ar7 2 python difflib

我正在使用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))
Run Code Online (Sandbox Code Playgroud)

然后,我得到这个丑陋的输出看起来......非常奇怪:

testtextwhichhasnomea nin g-

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

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

bad*_*adp 7

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

>>> list(difflib.ndiff("test", "testa"))
['  t', '  e', '  s', '  t', '+ a']
Run Code Online (Sandbox Code Playgroud)

(从字面上看,你可以通过在那里添加元素从列表["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
?     +
Run Code Online (Sandbox Code Playgroud)

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