Неверный вывод на python unified_diff - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь получить JSON DIF, используя difflib.unified_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 custom (64-bit) Я думаю, что я делаю что-то глупое

1 Ответ

0 голосов
/ 26 апреля 2018

Вывод правильный. Первые два входа в unified_diff обычно являются итераторами строк, как если бы вы читали из fp.readlines().

Поскольку вы задаете только одно ядро, оно обрабатывается так, как будто это единственная строка итератора. Другими словами, он обрабатывает его как одну длинную строку (которая есть), а не как отдельные строки из файла.

Чтобы получить ожидаемый результат, вам нужно разбить многострочные строки на разрыв строки.

for line in unified_diff(sone.split('\n'), stwo.split('\n')):
    print(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...