Сравнение двух текстовых файлов с последующим выведением совпадений (Python)
Приветствую сообщество stackoverflow. Есть два текстовых файла ('file.txt', 'file2.txt'), нужно провести сравнение и вывести совпадение. Я тут набросал работающий вариант, и мне в нем нравиться, что вывод игнорирует если строка в одном из файлов начинается с пробела или какой-либо вступительной фразы - выводит только совпадения. Однако есть и недостаток указал их #так.
with open(file.txt) as file1:
for line in file1:
filelist1 = line.split()
with open(file2.txt) as file2:
for line in file2:
filelist2 = line.split()
resoult = list(set(filelist1) & set(filelist2))
if resoult == []: #(осторожно наколхозил) вот тут мне не нравиться, если не использовать эту команду при выводе совпадений из текстовых файлов будет множество пустых списков'''
continue
else:
print(resoult, end='\n')
Хотелось бы сюда вставить что-то вроде if/else в плане: если вывод пустой - написать пользователю, что совпадения не найдены; если же 'len(resoult) > 0' - поздравить с найденными совпадениями. Но сделать это с помощью данного кода не представляется возможности.
Пример.
file.txt:
груша
яблоко апельсин
арбуз и дыня
file2.txt:
манго малина яблоко
дыня
Мой вывод:
['яблоко']
['дыня']
Желаемый вывод:
Ваши найденные совпадения:
яблоко
дыня
Очень хотелось бы посмотреть, как с этой простой задачей справиться более лаконично и правильно. Заранее прошу прощения за глупость и большое спасибо за Ваши ответы!
Ответы (2 шт):
Код не сильно красивый, но вот наипростейший способ найти пересечение множеств:
f = open('file.txt', 'r', encoding='utf-8')
lines1 = set(f.read().split())
f.close()
f = open('file2.txt', 'r', encoding='utf-8')
lines2 = set(f.read().split())
f.close()
print(lines1)
print(lines2)
print(lines1.intersection(lines2))
Вывод:
{'груша', 'арбуз', 'апельсин', 'и', 'яблока', 'дыня'}
{'дыня', 'манго', 'яблоко', 'малина'}
{'дыня'}
Заметим, что из представленного набора данных слова "яблока" и "яблоко" - разные, поэтому не вывелись. Чтобы сделать возможным вывод сообщений "найдены" или "не найдены" совпадения, то добавим простую проверку:
f = open('file.txt', 'r', encoding='utf-8')
lines1 = set(f.read().split())
f.close()
f = open('file2.txt', 'r', encoding='utf-8')
lines2 = set(f.read().split())
f.close()
print('Первое множество:', lines1)
print('Второе множество:', lines2)
intersection = lines1.intersection(lines2)
if len(intersection) > 0:
print('Совпадения найдены:', intersection)
else:
print('Совпадения не найдены')
Вывод:
Первое множество: {'груша', 'яблока', 'арбуз', 'дыня', 'апельсин', 'и'}
Второе множество: {'малина', 'яблоко', 'манго', 'дыня'}
Совпадения найдены: {'дыня'}
На вопрос (vinter_man) ''Желаемый вывод..." дополнение к ответу (Sergey K.)
if len(intersection) > 0:
print('Поздравляю с совпадениями:')
else:
print('Cовпадения не найдены')
for resoults in intersrctoin:
print('{0:}'.format(resoults))