Как создать ручной diff между двумя объектами Json, который можно отправить в Reviewboard с помощью python?
Как мне создать diff из двух объектов json, чтобы они были в ручном формате diff, который можно отправить на обзорную доску? Мне нужно сгенерировать diff из скрипта Python. Я думаю, что ручные diff генерируются с помощью утилиты командной строки "diff file1 file2". Могу ли я сгенерировать похожий diff, совместимый с reviewboard, используя difflib? Или мне нужна другая библиотека? Спасибо!
2 ответа
Решение
Используйте difflib:
def show_diff(seqm):
output= []
for opcode, a0, a1, b0, b1 in seqm.get_opcodes():
if opcode == 'equal':
output.append(seqm.a[a0:a1])
elif opcode == 'insert':
output.append("<ins>" + seqm.b[b0:b1] + "</ins>")
elif opcode == 'delete':
output.append("<del>" + seqm.a[a0:a1] + "</del>")
elif opcode == 'replace':
output.append("<del>" + seqm.a[a0:a1] + "</del>" + "<ins>" + seqm.b[b0:b1] + "</ins>" )
else:
raise RuntimeError, "Unexpected opcode"
return ''.join(output)
В вашей ситуации вы сравниваете ваши файлы JSON (я просто использовал фиктивный текст):
In [4]: sm = difflib.SequenceMatcher(None, 'hello', 'hello world')
In [6]: diff = show_diff(sm)
In [7]: diff
Out[7]: 'hello<ins> world</ins>'
Посмотрите документацию, если вам нужен другой вывод из difflib
Я просто думаю, что прежде чем перейти к diff, вам следует переформатировать объект JSON, скажем, в алфавитном и числовом порядке.