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):
'blabla' in open('example.txt').read()
in meinem Python 2.7s.find('blabla')
(auf -1 prüfen). Ich könnte schwören, dass es früher auch funktioniert hatin
... Aber es scheint jetzt, dass esin
nur für einzelne Charaktere funktioniert ...if 'blabla' in open('example.txt').read(): print "true"
==> Wie können wirexample.txt
in diesem Fall die Datei schließen ?open
sollte in der Regel in einerwith
Erklärung zusammengefasst werden:with open(file_name) as fl: return text in fl.read()
Als Jeffrey Said überprüfen Sie nicht den Wert von
check()
. Außerdem gibt Ihrecheck()
Funktion nichts zurück. Beachten Sie den Unterschied:Dann können Sie die Ausgabe von testen
check()
:quelle
Hier ist eine andere Möglichkeit, Ihre Frage möglicherweise mit der Suchfunktion zu beantworten, die Ihnen einen wörtlichen numerischen Wert dafür gibt, wo sich etwas wirklich befindet
Schreiben Sie in find das Wort, das Sie suchen möchten, und
'file'
steht für Ihren Dateinamenquelle
Dies geschieht immer, weil Wahr immer Wahr ist.
Sie wollen so etwas:
Viel Glück!
quelle
Zu diesem Zweck habe ich eine kleine Funktion gemacht. Es sucht nach einem Wort in der Eingabedatei und fügt es dann der Ausgabedatei hinzu.
quelle
Ihre
check
Funktion sollte denfound
Booleschen Wert zurückgeben und damit bestimmen, was gedruckt werden soll.Der zweite Block könnte auch verdichtet werden zu:
quelle
Zwei Probleme:
Ihre Funktion gibt nichts zurück. Eine Funktion, die nichts explizit zurückgibt, gibt None zurück (was falsch ist).
True ist immer True - Sie überprüfen nicht das Ergebnis Ihrer Funktion
.
quelle
So durchsuchen Sie den Text in der Datei und geben einen Dateipfad zurück, in dem das Wort gefunden wird (
In Main ()
quelle
gefunden = Falsch
quelle
Wenn der Benutzer in einer bestimmten Textdatei nach dem Wort suchen möchte.
quelle
quelle