Powód, dla którego zawsze otrzymywałeś, True
został już podany, więc podam kolejną sugestię:
Jeśli twój plik nie jest zbyt duży, możesz wczytać go do łańcucha i po prostu go użyć (łatwiej i często szybciej niż czytanie i sprawdzanie linii po linii):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Kolejna sztuczka: możesz złagodzić możliwe problemy z pamięcią, używając mmap.mmap()
do utworzenia obiektu „podobnego do łańcucha”, który korzysta z pliku źródłowego (zamiast czytać cały plik z pamięci):
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')
UWAGA: w Pythonie 3 mmapy zachowują się bytearray
raczej jak obiekty niż łańcuchy, więc podciąg, którego szukasz, find()
musi być również bytes
obiektem, a nie łańcuchem, np. 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')
Możesz także użyć wyrażeń regularnych mmap
np. Przy wyszukiwaniu bez rozróżniania wielkości liter:if re.search(br'(?i)blabla', s):
'blabla' in open('example.txt').read()
w moim Pythonie 2.7s.find('blabla')
(sprawdź -1). Mógłbym przysiąc, że kiedyś to działałoin
... Ale teraz wydaje się, żein
działa tylko dla pojedynczych postaci ...if 'blabla' in open('example.txt').read(): print "true"
==> Jakexample.txt
w takim przypadku możemy zamknąć plik?open
powinno być ogólnie zawarte wwith
oświadczeniu:with open(file_name) as fl: return text in fl.read()
Jak powiedział Jeffrey, nie sprawdzasz wartości
check()
. Ponadto Twojacheck()
funkcja niczego nie zwraca. Zwróć uwagę na różnicę:Następnie możesz przetestować wyjście
check()
:źródło
Oto inny sposób, aby ewentualnie odpowiedzieć na twoje pytanie za pomocą funkcji wyszukiwania, która podaje dosłowną wartość liczbową tego, gdzie coś naprawdę się znajduje
w find wpisz słowo, które chcesz znaleźć i
'file'
oznacza nazwę plikuźródło
Dzieje się tak zawsze, ponieważ prawda jest zawsze prawda.
Chcesz czegoś takiego:
Powodzenia!
źródło
W tym celu zrobiłem małą funkcję. Wyszukuje słowo w pliku wejściowym, a następnie dodaje je do pliku wyjściowego.
źródło
Twoja
check
funkcja powinna zwrócić wartośćfound
logiczną i użyć jej do określenia, co ma zostać wydrukowane.drugi blok można również skondensować do:
źródło
Dwa problemy:
Twoja funkcja nic nie zwraca; funkcja, która nie zwraca jawnie niczego, zwraca None (co jest fałszywe)
True jest zawsze True - nie sprawdzasz wyniku swojej funkcji
.
źródło
Jak przeszukiwać tekst w pliku i zwraca ścieżkę do pliku, w której zostało znalezione słowo (Как искать часть текста в файле и возвращять путь к файлу в котором это слово)
W głównym ()
źródło
znaleziono = Fałsz
źródło
Jeśli użytkownik chce wyszukać słowo w podanym pliku tekstowym.
źródło
źródło