Der Grund, warum Sie immer bekommen haben, True
wurde bereits angegeben, daher werde ich nur einen weiteren Vorschlag machen:
Wenn Ihre Datei nicht zu groß ist, können Sie sie in eine Zeichenfolge einlesen und diese einfach verwenden (einfacher und oft schneller als das Lesen und Überprüfen von Zeile für Zeile):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Ein weiterer Trick: Sie können die möglichen Speicherprobleme verringern, indem Sie mmap.mmap()
ein "stringartiges" Objekt erstellen, das die zugrunde liegende Datei verwendet (anstatt die gesamte Datei im Speicher zu lesen):
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')
HINWEIS: In Python 3 verhalten sich mmaps bytearray
eher wie Objekte als wie Zeichenfolgen. Daher muss die Teilsequenz , nach der Sie suchen find()
, auch ein bytes
Objekt und keine Zeichenfolge sein, z. 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')
Sie können auch reguläre Ausdrücke für die mmap
Suche verwenden, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird:if re.search(br'(?i)blabla', s):