Поиск текста в строке python
Стоит задача пометить строки "!!!" знаками, в которых содержится слово. Например:
Список:
1.Яблоко
2.Груша
3.Апельсин
4.Арбуз
Ввод с консоли для поиска -
text = input("Введите слово: Арбуз")
Итог:
1.Яблоко
2.Груша
3.Апельсин
4.Арбуз !!!!!
Вопрос: Можно ли сделать так, чтобы мы могли писать несколько слов, для поиска? К примеру:
text = input("Введите слово: Арбуз,Яблоко")
и обязательно!!! Выход был таким:
Итог:
1.Яблоко !!!!!
2.Груша
3.Апельсин
4.Арбуз !!!!!
То есть, одновременно, в одной строке искало совпадение сразу двух заданных слов? Без дополнительных выводов дубликатов строк и т.д
Пытался сделать так, но получается что прогоняет массив 2 раза для разных слов.
def GetText():
contains = input("Введите слово: ")
contains1 = contains.split(",")
for fruts in contains1:
CheckLines(fruts)
def CheckLines(textToRes):
with open("fruts.txt", encoding="utf-8") as file2:
linesFile2 = file2.readlines()
for lines in linesFile2:
if textToRes in lines:
print("!!! " +lines)
print(lines)
Ответы (1 шт):
В начале создаем список введенных слов в нижнем регистре, очищенных от пробелов по краям. Потом в цикле перебираем строки файла. Во вложенном цикле перебираем введенные слова, определяя их наличие в очередной строке, переведенной также в нижний регистр (для регистронезависимого сравнения; можно вместо .lower() использовать .casefold()). Если находим, выводим текст и вск. знаки и прерываем цикл. Если не находим (else: у цикла for) то выводим только текст. Метод .rstrip() применяем, чтобы удалить ненужные нам переводы строки из файла.
words = [s.strip().lower() for s in input("Введите слова через запятую: ").split(',')]
with open(r"c:\test\fruts.txt", encoding="utf-8") as file2:
for line in file2.readlines():
linelower = line.lower()
for word in words:
if word in linelower:
print(f'{line.rstrip()} !!!!')
break
else:
print(f'{line.rstrip()}')
Введите слова через запятую: яблоко, груша
1.Яблоко !!!!
2.Груша !!!!
3.Апельсин
4.Арбуз
Вариант покороче, но менее понятный:
words = [s.strip().lower() for s in input("Введите слова через запятую: ").split(',')]
with open(r"c:\test\fruts.txt", encoding="utf-8") as file2:
for line in file2.readlines():
linelower = line.lower()
print(f'{line.rstrip()}{" !!!!" if any(word in linelower for word in words) else ""}')