Обновить

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

Python *Тестирование игр *Тестирование IT-систем *
Recovery mode

Простой скрипт для визуального получения различий между строк на `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}')

Ответ:

Теги:
Хабы:
Всего голосов 1: ↑0 и ↓1 -1
Просмотры 27
Комментарии Комментировать

Минуточку внимания