Разница между двумя строками

—

от автора

Простой скрипт для получения  различий между строк на
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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *