我试图使用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位) 我想我做的事情很愚蠢
答案 0 :(得分:1)
输出正确。 unified_diff
的前两个输入通常是字符串的迭代器,就像您从fp.readlines()
读入一样。
因为你只给出了一个sting,所以它将它视为迭代器中唯一的字符串。换句话说,它将它视为一个长字符串(它是),而不是文件中的单独行。
要获得您期望的输出,您需要在换行符上拆分多行字符串。
for line in unified_diff(sone.split('\n'), stwo.split('\n')):
print(line)