错误的python unified_diff输出

时间:2018-04-26 16:02:01

标签: python python-2.7

我试图使用difflib.unified_diff获取json diff,但似乎是错误的。

from difflib import unified_diff
import sys

sone = """
{
    "one": 1,
    "a": "A",
    "b": "B"
}
    """

stwo = """
{
    "two": 2,
    "a": "A",
    "b": "B"
}
    """

for line in unified_diff(sone, stwo, fromfile="one", tofile="two", lineterm='\n'):
    sys.stdout.write(line)

输出如下所示,

--- one
+++ two
@@ -6,13 +6,13 @@
     "+t+w o-n-e " :  -1+2

我应该得到类似下面的内容,

@@ -1,5 +1,5 @@
 {
-    "one": 1,
+    "two": 2,
     "a": "A",
     "b": "B"
 }

我使用Python 2.7.14 :: Anaconda自定义(64位) 我想我做的事情很愚蠢

1 个答案:

答案 0 :(得分:1)

输出正确。 unified_diff的前两个输入通常是字符串的迭代器,就像您从fp.readlines()读入一样。

因为你只给出了一个sting,所以它将它视为迭代器中唯一的字符串。换句话说,它将它视为一个长字符串(它是),而不是文件中的单独行。

要获得您期望的输出,您需要在换行符上拆分多行字符串。

for line in unified_diff(sone.split('\n'), stwo.split('\n')):
    print(line)