Lý do tại sao bạn luôn có True
đã được đưa ra, vì vậy tôi sẽ chỉ cung cấp một gợi ý:
Nếu tập tin của bạn không phải là quá lớn, bạn có thể đọc nó thành một chuỗi, và chỉ sử dụng (dễ dàng hơn và thường nhanh hơn so với đọc và kiểm tra dòng trên mỗi dòng):
if 'blabla' in open('example.txt').read():
print("true")
một lừa: bạn có thể làm giảm bớt các vấn đề về bộ nhớ càng tốt bằng cách sử dụng mmap.mmap()
để tạo ra một "chuỗi giống như" đối tượng có sử dụng các tập tin cơ bản (thay vì đọc ing toàn bộ tập tin trong bộ nhớ):
import mmap
f = open('example.txt')
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
if s.find('blabla') != -1:
print('true')
Chú ý: trong python 3, mmaps cư xử như bytearray
đối tượng chứ không phải là chuỗi, do đó dãy con bạn tìm kiếm với find()
có phải là một đối tượng bytes
chứ không phải là một chuỗi cũng , 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ụm từ thông dụng trên mmap
ví dụ:, Case-insensitive tìm kiếm: if re.search(br'(?i)blabla', s):
Điều này thật tuyệt vời! Đây chính là lý do tại sao tôi yêu stackoverflow: nó không chỉ cung cấp cho bạn một giải pháp, nó mang lại cho bạn một lựa chọn tốt hơn. Cảm ơn :) – HankSmackHood
Giải pháp thứ hai không cho kết quả tương tự như '' blabla 'trong mở (' example.txt '). Read() 'trong python của tôi 2.7 – xApple
Lạ, nó hoạt động với' s.find (' blabla ') '(kiểm tra -1). Tôi có thể thề nó được sử dụng để làm việc với 'in' là tốt ... Nhưng có vẻ như bây giờ' in' chỉ hoạt động cho các ký tự đơn ... – Steven