A razão pela qual você sempre recebeu True
já foi apresentada, então vou oferecer outra sugestão:
Se o seu arquivo não for muito grande, você poderá lê-lo em uma string e apenas usá-lo (mais fácil e frequentemente mais rápido do que ler e verificar linha por linha):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Outro truque: você pode aliviar os possíveis problemas de memória usando mmap.mmap()
para criar um objeto "semelhante a uma string" que usa o arquivo subjacente (em vez de ler o arquivo inteiro na memória):
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')
OBSERVAÇÃO: no python 3, os mmaps se comportam como bytearray
objetos, e não como strings; portanto, a subsequência que você procura find()
deve ser um bytes
objeto e não uma string também, por exemplo. 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')
Você também pode usar expressões regulares em mmap
, por exemplo, pesquisa sem distinção entre maiúsculas e minúsculas:if re.search(br'(?i)blabla', s):
'blabla' in open('example.txt').read()
no meu python 2.7s.find('blabla')
(verifique -1). Eu poderia jurar que costumava trabalharin
também ... Mas agora parece quein
só funciona para personagens únicos ...if 'blabla' in open('example.txt').read(): print "true"
==> Como podemos fechar oexample.txt
arquivo neste caso?open
geralmente deve ser encapsulado em umawith
declaração:with open(file_name) as fl: return text in fl.read()
Como Jeffrey Said, você não está verificando o valor de
check()
. Além disso, suacheck()
função não está retornando nada. Observe a diferença:Então você pode testar a saída de
check()
:fonte
Aqui está outra maneira de responder à sua pergunta usando a função find, que fornece um valor numérico literal de onde algo realmente está
em encontrar, escreva a palavra que deseja encontrar e
'file'
significa o nome do seu arquivofonte
Isso sempre acontece porque True é sempre True.
Você quer algo assim:
Boa sorte!
fonte
Eu fiz uma pequena função para esse fim. Ele procura uma palavra no arquivo de entrada e a adiciona ao arquivo de saída.
fonte
Sua
check
função deve retornar ofound
booleano e usá-lo para determinar o que imprimir.o segundo bloco também pode ser condensado para:
fonte
Dois problemas:
Sua função não retorna nada; uma função que não retorna explicitamente nada retorna None (que é falso)
True é sempre True - você não está verificando o resultado da sua função
.
fonte
Como pesquisar o texto no arquivo e Retorna um caminho de arquivo no qual a palavra é encontrada (Clique para obter mais informações)
Principal ()
fonte
encontrado = Falso
fonte
Se o usuário quiser procurar a palavra no arquivo de texto fornecido.
fonte
fonte