เหตุผลที่คุณได้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):