Модуль difflibв Python предоставляет множество методов для поиска близких совпадений между строками. Вот несколько методов и примеры кода:
Метод
get_close_matches(): этот метод возвращает список лучших «достаточно хороших» совпадений для заданной строки запроса в списке строк.
import difflib
query = "apple"
choices = ["banana", "orange", "pineapple", "applesauce"]
close_matches = difflib.get_close_matches(query, choices)
print(close_matches)
Выход:
['apple', 'applesauce']
-
Метод
get_matching_blocks(): этот метод возвращает список троек, представляющих совпадающие подпоследовательности. Каждая тройка содержит начальные индексы совпадающих подпоследовательностей в двух сравниваемых строках, а также длину совпадения.
import difflib
a = "kitten"
b = "sitting"
matcher = difflib.SequenceMatcher(None, a, b)
matching_blocks = matcher.get_matching_blocks()
for block in matching_blocks:
start_a, start_b, length = block
print(f"Match found at indices {start_a} and {start_b}, length: {length}")
Выход:
Match found at indices 0 and 0, length: 4
Match found at indices 4 and 6, length: 1
Match found at indices 6 and 7, length: 0
-
Метод
ndiff(): этот метод сравнивает две последовательности строк и генерирует удобочитаемый отчет о различиях.
import difflib
a = ["apple", "banana", "orange"]
b = ["apple", "kiwi", "orange"]
diff = difflib.ndiff(a, b)
print('\n'.join(diff))
Выход:
apple
- banana
+ kiwi
orange
-
Метод
get_opcodes(): этот метод возвращает список из 5 кортежей, представляющих различия между двумя последовательностями. Каждый кортеж содержит код операции, начальный и конечный индексы среза из первой последовательности, начальный и конечный индексы среза из второй последовательности.
import difflib
a = "kitten"
b = "sitting"
matcher = difflib.SequenceMatcher(None, a, b)
opcodes = matcher.get_opcodes()
for opcode in opcodes:
tag, start_a, end_a, start_b, end_b = opcode
print(f"{tag}: a[{start_a}:{end_a}] -> b[{start_b}:{end_b}]")
Выход:
equal: a[0:4] -> b[0:4]
insert: a[4:4] -> b[4:5]
equal: a[4:7] -> b[5:8]