Lý do tại sao bạn luôn nhận True
được đã được đưa ra, vì vậy tôi sẽ chỉ đưa ra một đề xuất khác:
Nếu tệp của bạn không quá lớn, bạn có thể đọc nó thành một chuỗi và chỉ cần sử dụng nó (dễ dàng và thường nhanh hơn đọc và kiểm tra từng dòng trên mỗi dòng):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Một mẹo khác: bạn có thể giảm bớt các vấn đề bộ nhớ có thể bằng cách sử dụng mmap.mmap()
để tạo một đối tượng "giống như chuỗi" sử dụng tệp bên dưới (thay vì đọc toàn bộ tệp trong bộ nhớ):
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')
LƯU Ý: trong python 3, mmaps hoạt động giống như bytearray
các đối tượng hơn là các chuỗi, do đó, chuỗi con bạn tìm kiếm find()
phải là một bytes
đối tượng chứ không phải là một chuỗi, ví dụ: 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')
Bạn cũng có thể sử dụng các biểu thức thông thường trên mmap
ví dụ: tìm kiếm không phân biệt chữ hoa chữ thường:if re.search(br'(?i)blabla', s):