Причина, почему вы всегда получали True
уже дано, так что я просто предложить другое предложение:
Если файл не слишком велик, вы можете прочитать его в строку, и только использовать это (проще и часто быстрее, чем чтение и проверка линии в каждой строке):
if 'blabla' in open('example.txt').read():
print("true")
Еще одна хитрость: вы можете облегчить возможные проблемы с памятью с помощью mmap.mmap()
для создания «нитевидные» объект, который использует базовый файл (вместо чтения ИНГ весь файл в памяти):
import mmap
f = open('example.txt')
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):
Это замечательно! Именно поэтому я люблю stackoverflow: он не просто дает вам решение, оно дает вам лучший вариант. Спасибо :) – HankSmackHood
Второе решение не дает те же результаты, что и «blabla» в open («example.txt»). Read() 'в моем python 2.7 – xApple
Странно, он работает с' s.find ('blabla ') '(проверьте значение -1). Я мог бы поклясться, что он тоже работал с 'in' ... Но теперь кажется, что' in' работает только для одиночных символов ... – Steven