Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Простой скрипт для получения различий между строк на
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}')
Ответ: