- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
DeepDiff 结果如下:
{'dictionary_item_added': [root[5], root[6]], 'dictionary_item_removed': [root[4]]}
对于更改的人工审查,这仅适用于小示例。我需要类似 GitHub 提交和拉取请求中显示的代码文件差异之类的东西,但对于 json。
所以这是我的问题:
与代码不同,json 不关心格式,也不关心字典中键的顺序。
我可以通过预先对 json 中的所有字典进行排序然后将它们与 git-diff 进行比较来避免不使用 DeepDiff。然而,将文件写入磁盘并输出到 git-diff
是一件很麻烦的事情。只需执行 DeepDiff(t1, t2)
就非常干净。
我正在看的例子是:
from deepdiff import DeepDiff
t1 = {1:1, 3:3, 4:4}
t2 = {1:1, 3:3, 5:5, 6:6}
ddiff = DeepDiff(t1, t2)
print(ddiff)
我希望看到已更改的值中突出显示的词,如下所示:
最佳答案
difflib's ndiff可能是您要实现的目标:
import difflib
import json
from typing import Callable
t1 = {1:1, 3:3, 4:4}
t2 = {1:1, 3:3, 5:5, 6:6}
RED: Callable[[str], str] = lambda text: f"\u001b[31m{text}\033\u001b[0m"
GREEN: Callable[[str], str] = lambda text: f"\u001b[32m{text}\033\u001b[0m"
def get_edits_string(old: str, new: str) -> str:
result = ""
lines = difflib.ndiff(old.splitlines(keepends=True), new.splitlines(keepends=True))
for line in lines:
line = line.rstrip()
if line.startswith("+"):
result += GREEN(line) + "\n"
elif line.startswith("-"):
result += RED(line) + "\n"
elif line.startswith("?"):
continue
else:
result += line + "\n"
return result
print(
get_edits_string(
json.dumps(t1, indent=4, sort_keys=True),
json.dumps(t2, indent=4, sort_keys=True)
)
)
这样做的好处在 CLI 的情况下也很有帮助——我已经在代码中过滤了它,但它也有无颜色的差异,带有 ?
标记更改的位置.
关于python - 如何使 DeepDiff 输出人类可读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74317707/
DeepDiff 结果如下: {'dictionary_item_added': [root[5], root[6]], 'dictionary_item_removed': [root[4]]} 对
DeepDiff 结果如下: {'dictionary_item_added': [root[5], root[6]], 'dictionary_item_removed': [root[4]]} 对
我有 2 个字典,我想得到它们的差异。为此,我使用 deepDiff module这非常好。可以添加参数“exclude_paths”,但问题是我想排除一个我不知道的路径,因为我的字典太大了。 喜欢:
我正在使用 DeepDiff .所以我得到如下结果: local = [{1: {'age': 50, 'name': 'foo'}}, {2: {'age': 90, 'name': 'bar'}
我有一个 DeepDiff 结果,它是通过比较两个 JSON 文件获得的。我必须从 deepdiff 结果构建一个 python 字典,如下所示。 json1 = {"spark": {"ttl":3
我是一名优秀的程序员,十分优秀!