Простой скрипт для получения различий между строк на
python, это полезно при создании тестов.
Существует стандартная библиотека difflib для этих целей, но я написал для неё более читаемый аналог.
Стандартный вариант
st1 = """/media/user/dd19b13d-bd85-46bb-8db9-5b8f6cf7a825/MyProject/PycharmProject/testfull_pack/venvs/bin/python/scratch_34.py""" st2 = """/media/user/dd19b13d-bd85-46bb-8et9-5b8f6cf7a825/MyProject/PycharmProjects/testfull_pack/venvs/bin/python/scratch_34.py""" rs = ''.join(list(difflib.unified_diff(st1, st2)))print(rs)
Ответ:
--- +++ @@ -30,8 +30,8 @@ b - 8-d-b+e+t 9 - 5@@ -71,6 +71,7 @@ e c t+s / t e
Мой скрипт
class colors: green = '\x1b[32m' reset = '\x1b[0m' red = '\x1b[31m' black = '\x1b[30m' yellow = '\x1b[33m' blue = '\x1b[34m' magenta = '\x1b[35m' cyan = '\x1b[36m' white = '\x1b[37m' bg_red = '\x1b[41m' bg_green = '\x1b[42m' def diff_string(str1: str, str2: str): _max = max([len(str1), len(str2)]) _len_str1 = len(str1) _len_str2 = len(str2) _res1 = '' _res2 = '' for _symbol in range(_max): if _symbol < _len_str1 and _symbol < _len_str2: if str1[_symbol] == str2[_symbol]: _res1 += '{1}{0}{2}'.format(str1[_symbol], colors.green, colors.reset) _res2 += '{1}{0}{2}'.format(str2[_symbol], colors.green, colors.reset) else: _res1 += '{1}{0}{2}'.format(str1[_symbol], colors.red, colors.reset) _res2 += '{1}{0}{2}'.format(str2[_symbol], colors.red, colors.reset) continue elif _symbol < _len_str1: _res1 += '{1}{0}{2}'.format(str1[_symbol], colors.bg_green, colors.reset) _res2 += '{1}{0}{2}'.format(' ', colors.bg_red, colors.reset) elif _symbol < _len_str2: _res1 += '{1}{0}{2}'.format(' ', colors.bg_red, colors.reset) _res2 += '{1}{0}{2}'.format(str2[_symbol], colors.bg_green, colors.reset) else: raise ValueError return _res1, _res2 if __name__ == '__main__': st1 = """/media/user/dd19b13d-bd85-46bb-8db9-5b8f6cf7a825/MyProject/PycharmProject/testfull_pack/venvs/bin/python/scratch_34.py""" st2 = """/media/user/dd19b13d-bd85-46bb-8et9-5b8f6cf7a825/MyProject/PycharmProjects/testfull_pack/venvs/bin/python/scratch_34.py""" # Пример 1 rst1, rst2 = diff_string(st1, st2) print(f'str1:::\n{rst1}') print(f'str2:::\n{rst2}')
Ответ:

ссылка на оригинал статьи https://habr.com/ru/post/657609/
Добавить комментарий