Alasan mengapa Anda selalu mendapat True
sudah diberikan, jadi saya hanya akan menawarkan saran lain:
Jika file Anda tidak terlalu besar, Anda dapat membacanya menjadi string, dan gunakan saja (lebih mudah dan sering lebih cepat daripada membaca dan memeriksa baris per baris):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Trik lain: Anda dapat mengurangi kemungkinan masalah memori dengan menggunakan mmap.mmap()
untuk membuat objek "string-like" yang menggunakan file yang mendasarinya (alih-alih membaca seluruh file dalam memori):
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')
CATATAN: dalam python 3, mmaps berperilaku seperti bytearray
objek daripada string, jadi selanjutnya yang Anda cari find()
harus menjadi bytes
objek daripada string juga, misalnya. 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')
Anda juga bisa menggunakan ekspresi reguler pada mmap
mis., Pencarian case-sensitive:if re.search(br'(?i)blabla', s):