Причина, по которой вы всегда получаете True
, уже указана, поэтому я просто предложу другое предложение:
Если ваш файл не слишком большой, вы можете прочитать его в строку и просто использовать его (проще и часто быстрее, чем чтение и проверка строки в строке):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Другой трюк: вы можете устранить возможные проблемы с памятью, используя mmap.mmap()
для создания «строкового» объекта, который использует базовый файл (вместо чтения всего файла в памяти):
import mmap
with open('example.txt') as f:
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
if s.find('blabla') != -1:
print('true')
ПРИМЕЧАНИЕ: в python 3 mmaps ведут себя как bytearray
объекты, а не как строки, поэтому искомая последовательность find()
должна быть также bytes
объектом, а не строкой, например. s.find(b'blabla')
:
#!/usr/bin/env python3
import mmap
with open('example.txt', 'rb', 0) as file, \
mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
if s.find(b'blabla') != -1:
print('true')
Вы также можете использовать регулярные выражения, mmap
например, при поиске без учета регистра:if re.search(br'(?i)blabla', s):
'blabla' in open('example.txt').read()
в моем Python 2.7s.find('blabla')
(проверьте -1). Я мог бы поклясться, что раньше онin
тоже работал ... Но теперь кажется, что этоin
работает только для отдельных персонажей ...if 'blabla' in open('example.txt').read(): print "true"
==> Как мы можем закрытьexample.txt
файл в этом случае?open
в общем случае следует заключить вwith
утверждение:with open(file_name) as fl: return text in fl.read()
Как сказал Джеффри, вы не проверяете ценность
check()
. Кроме того, вашаcheck()
функция ничего не возвращает. Обратите внимание на разницу:Затем вы можете проверить вывод
check()
:источник
Вот еще один способ ответить на ваш вопрос, используя функцию поиска, которая дает буквальное числовое значение того, где что-то действительно есть.
в поиске напишите слово, которое вы хотите найти, и
'file'
означает ваше имя файлаисточник
Это всегда происходит, потому что Истина всегда Истина.
Вы хотите что-то вроде этого:
Удачи!
источник
Я сделал небольшую функцию для этой цели. Он ищет слово во входном файле и затем добавляет его в выходной файл.
источник
Ваша
check
функция должна вернутьfound
логическое значение и использовать его, чтобы определить, что печатать.второй блок также может быть сжат до:
источник
Две проблемы:
Ваша функция ничего не возвращает; функция, которая явно не возвращает ничего, возвращает None (что неверно)
True всегда True - вы не проверяете результат своей функции
,
источник
Как найти текст в файле и вернуть путь к файлу, в котором найдено слово.
В основном ()
источник
найдено = ложно
источник
Если пользователь хочет найти слово в данном текстовом файле.
источник
источник