如何使用difflib.ndiff忽略行?

beh*_*ens 2 python

根据文档,您可以提供linejunk函数来忽略certian行。但是,我无法使其正常工作。这是一些示例代码供讨论:

from re import search
from difflib import ndiff 
t1 = 'one 1\ntwo 2\nthree 3'
t2 = 'one 1\ntwo 29\nthree 3'
diff = ndiff(t1.splitlines(), t2.splitlines(), lambda x: search('2', x))
Run Code Online (Sandbox Code Playgroud)

我的意图是忽略第二行,而diff将是一个没有任何区别的生成器。

谢谢您的帮助。

cao*_*nan 5

我最近遇到了同样的问题。

这是我发现的:

cf. http://bugs.python.org/issue14332

* junk参数的主要目的是加快匹配以发现差异,而不是掩盖差异。

cf http://hg.python.org/cpython/rev/0a69b1e8b7fe/

该补丁为difflib文档中的“垃圾”和“忽略”概念提供了更好的解释

这些垃圾过滤功能可加快匹配速度以发现差异,并且不会导致任何不同的行或字符被忽略。