import difflib difflib.unified_diff(a, b, fromfile='', \ tofile='', fromfiledate='', \ tofiledate='', n=3, lineterm='\n')
a
, b
- сравниваемые списки строк.fromfile=''
- строка, заголовок для имени файла,tofile=''
- строка, заголовок для имени файла,fromfiledate=''
- время модификации в формате ISO 8601,tofiledate=''
- время модификации в формате ISO 8601,n=3
- число строк контекста,lineterm='\n'
- разделитель строк.Функция unified_diff()
модуля difflib
сравнивает a
и b
- списки строк и возвращает дельту - генератор дельта-строк в унифицированном формате Unix утилиты diff
.
Контекстные различия - это компактный способ отображения только тех строк, которые изменились, плюс несколько строк контекста. Изменения отображаются во встроенном стиле, вместо отдельных блоков до/после. Число строк контекста задается числом n
, которое по умолчанию равно трем.
По умолчанию строки управления diff
(те, что с ---
, +++
или @@
) создаются с символом новой строки '\n'
. Это полезно, так как входы, созданные из результатов работы io.IOBase.readline()
приводят к различиям, которые подходят для использования io.IOBase.writelines()
, так как и входы, и выходы имеют конечные новые строки.
Для входных данных, которые не имеют завершающих символов новой строки, установите аргумент lineterm=''
, чтобы выходные данные не имели новых строк.
У формата Unix утилиты diff
имеются заголовки для имен файлов и времени изменения. Любой из них или все они могут быть заданы с помощью строк для fromfile
, tofile
, fromfiledate
и tofiledate
. Время модификации обычно выражается в формате ISO 8601. Если не указано, строки по умолчанию будут пустыми.
>>> import difflib, sys >>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n'] >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n'] >>> diff = difflib.unified_diff(s1, s2, fromfile='before.py', tofile='after.py') >>> sys.stdout.writelines(diff) # --- before.py # +++ after.py # @@ -1,4 +1,4 @@ # -bacon # -eggs # -ham # +python # +eggy # +hamster # guido