Поиск по части элемента в массиве и вывод элемента (Python)
Имеется файл, в котором порядка тысячи строк. Для быстроты поиска я сперва помещаю его в массив (пока тестирую, не уверен, что так на самом деле быстрее). В общем, мне нужно, чтоб при нахождении строки, содержащей слово, выводилась вся строка. Попытался реализовать вот так, но выводится последняя строка из файла. И я не очень понимаю, как мне получить нужную строку?
list = []
f = open('list.txt', 'r', encoding='utf-8')
for line in f:
list.append(line)
def searchlist(word):
if any(word in line for line in list):
print('Your word is in this line:')
print(line)
else:
print('There is no lines with your word')
while True:
word = input('Input word to find:')
searchlist(word)
Ответы (1 шт):
вместо этого:
f = open('list.txt', 'r', encoding='utf-8')
for line in f:
list.append(line)
используйте это:
f = open('list.txt', 'r', encoding='utf-8')
list = f.readlines()
и кстати называть переменные ключевыми словами не очень хорошо (в смысле плохо)
последняя строка выводится, потому что
if any(word in line for line in list):
определяет СНАЧАЛА есть ли слово во всех строках, поэтому если слово есть, то вы получаете последнее значение line из цикла, т.е. последнюю строку в списке
итого ваш код должен быть таким:
f = open('list.txt', 'r', encoding='utf-8')
is_found = False
for line in f.readlines():
if word in line:
is_found = True
print('Your word is in this line:', line)
if not is_found:
print('There is no lines with your word')
f.close()
или можно сделать чуть покрасивее:
f = open('list.txt', 'r', encoding='utf-8')
found = [line[:-1] for line in f.readlines() if word in line]
if len(found):
print('Your word is in this line:')
print(*found, sep='\n')
else:
print('There is no lines with your word')
f.close()
P.S.
и самое главное word in text ищет не слово, в тексте, а часть текста, например "xxy" in "xxyxx" найдет вхождение текста
так что по хорошему это тоже надо бы учесть