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