2015-01-16 1 views
1

Я играю с difflib в Python, и у меня возникают трудности с получением результата, чтобы хорошо выглядеть. По какой-то странной причине difflib добавляет перед пробелом одиночное пробельное пространство. Например, у меня есть файл (textfile01.txt), который выглядит следующим образом:вывод difflib очень странный, добавив лишние пробелы для каждого символа

тестовый текст, который не имеет никакого значения

и textfile02.txt

тестовый текст, который имеет не что означает

но выглядит красиво

Вот небольшой пример кода для того, как я пытаюсь выполнить сравнение:

import difflib 

handle01 = open(text01.txt , 'r') 
handle02 = open(text02.txt , 'r') 

d = difflib.ndiff(handle01.read() , handle02.read()) 
print "".join(list(diff)) 

Тогда я получаю этот уродливый вывод, который выглядит ... очень странно:

testtextwhichhasnomea NIN g-

- b- u- t- - l- о- о- k- ​​s- - п i- c- е

Как вы можете видеть, результат выглядит ужасно. Я только что проводил базовые учебные пособия по difflib, которые я нашел в Интернете, и, согласно этим, результат должен выглядеть совершенно иначе. Я понятия не имею, что я делаю неправильно. Есть идеи?

ответ

3

difflib.ndiff сравнивает списки строк, но вы передаете им строки —, а строка - это список символов. Таким образом, функция сравнивает строки символов .

>>> list(difflib.ndiff("test", "testa")) 
[' t', ' e', ' s', ' t', '+ a'] 

(буквально, вы можете перейти из списка ["t", "e", "s", "t"] в список ["t", "e", "s", "t", "a"] путем добавления элемента ["a"] там.

Вы хотите изменить read() к readlines(), так что вы можете сравнить два файла в построчно мода, которая, вероятно, что вы ожидали.

вы также хотите изменить "".join(... к "\n".join(... для того, чтобы получить diff -как выход на экране.

>>> list(difflib.ndiff(["test"], ["testa"])) 
['- test', '+ testa', '?  +\n'] 
>>> print "\n".join(_) 
- test 
+ testa 
?  + 

(Здесь difflib в настоящее время дополнительный приятными и маркировка точного положения, в котором был добавлен символ в ? строки.)

+0

Это зафиксировали его. Я не понимал, что он ищет список строк. Большинство примеров, на которые я смотрел «казалось», использовали обычные строки. Спасибо за твою помощь! – erichar7