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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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


Интересные статьи

Интересные статьи

Маркетплейс – это сервис от 1С-Битрикс, который позволяет разработчикам делиться своими решениями с широкой аудиторией, состоящей из клиентов и других разработчиков.
Привет, Хабр. На днях Siemargl предложил мне перевести любопытную статью о победе над юниксовым wc при помощи хаскеля. Переводить её я, конечно же, не буду, и по нескольким причинам: автор вы...
Существует традиция, долго и дорого разрабатывать интернет-магазин. :-) Лакировать все детали, придумывать, внедрять и полировать «фишечки» и делать это все до открытия магазина.
Высказать то, что слова не могут передать; почувствовать самые разнообразные эмоции, переплетающиеся в ураган чувств; оторваться от земли, неба и даже самой Вселенной, отправившись в путешест...
Здравствуйте. Я уже давно не пишу на php, но то и дело натыкаюсь на интернет-магазины на системе управления сайтами Битрикс. И я вспоминаю о своих исследованиях. Битрикс не любят примерно так,...