La razón por la que siempre tiene True
ya se ha dado, así que voy a ofrecer otra sugerencia:
Si el archivo no es demasiado grande, se puede leer en una cadena, y justo el uso que (más fácil y más rápida que la lectura y comprobación de línea por línea):
if 'blabla' in open('example.txt').read():
print("true")
Otro truco: puede aliviar los posibles problemas de memoria mediante el uso de mmap.mmap()
para crear un objeto "similar a una cuerda" que utiliza el archivo subyacente (en lugar de leer ing todo el archivo en la memoria):
import mmap
f = open('example.txt')
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
if s.find('blabla') != -1:
print('true')
NOTA: en Python 3, mmaps comportarse como bytearray
objetos en lugar de cadenas, por lo que la subsecuencia busca con find()
tiene que ser un objeto bytes
lugar de una cadena, así , p.ej. 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')
También es posible usar expresiones regulares en mmap
por ejemplo,, Entre mayúsculas y minúsculas de búsqueda: if re.search(br'(?i)blabla', s):
¡Esto es brillante! Esto es exactamente por lo que amo stackoverflow: no solo te da una solución, sino que te da una mejor opción. Gracias :) – HankSmackHood
La segunda solución no da los mismos resultados que '' blabla 'en open (' example.txt '). Read() 'en mi python 2.7 – xApple
Extraño, funciona con' s.find (' blabla ') '(verificar por -1). Podría jurar que solía funcionar con 'in' también ... Pero ahora parece que' en' solo funciona para caracteres individuales ... – Steven