从Python的difflib获取标准的gnu diff输出?

时间:2017-09-19 05:29:19

标签: python difflib

有没有办法从Python difflib获得以下输出(尤其是 1,4c1,4 语法)?

diff foo baz 
1,4c1,4
< 'asdf'
< 'asdf'
< 'asdf'
< 'asdf'
---
> asdf
> asdf
> asdf
> asdf

2 个答案:

答案 0 :(得分:1)

你可以不用doupt使用difflib重新创建所需的语法输出,但可能需要一些不正确的步骤来完美地模拟。

如果不需要此特定输出语法,您可以考虑以下解决方案:

import difflib
def generate_readable_diff_string(str_a, str_b):
    return ''.join(
        difflib.unified_diff(
            str_a.splitlines(True),
            str_b.splitlines(True),
            lineterm='\n'
        )
    )

对于你的foo和baz,这个函数会产生以下结果:

--- 
+++ 
@@ -1,4 +1,4 @@
-'asdf'
-'asdf'
-'asdf'
-'asdf'
+asdf
+asdf
+asdf
+asdf

答案 1 :(得分:1)

这里有一个很好的实现:https://github.com/glanois/code/blob/master/python/ppt/diff.py

其标题评论说:

  

此类产生POSIX默认格式的差异(请参阅   http://www.unix.com/man-page/POSIX/1posix/diff/),与...相同   Gnu diff&#34;正常格式&#34; (看到   http://www.gnu.org/software/diffutils/manual/diffutils.html#Normal)。

我用python 2.7测试了它,为你的例子产生了以下输出:

$ python diff.py foo baz
1,4c1,4
< 'asdf'
< 'asdf'
< 'asdf'
< 'asdf'
---
> asdf
> asdf
> asdf
> asdf