I want to check if a string is in a text file. If it is, do X. If it's not, do Y. However, this code always returns
datafile = file('example.txt')
found = False
for line in datafile:
if blabla in line:
found = True
The reason why you always got
True has already been given, so I'll just offer another suggestion:
If your file is not too large, you can read it into a string, and just use that (easier and often faster than reading and checking line per line):
if 'blabla' in open('example.txt').read(): print "true"
Another trick: you can alleviate the possible memory problems by using
mmap.mmap() to create a "string-like" object that uses the underlying file (instead of reading the whole file in memory):
import mmap f = open('example.txt') s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) if s.find('blabla') != -1: print 'true'
NOTE: in python 3, mmaps behave like
bytearray objects rather than strings, so the subsequence you look for with
find() has to be a
bytes object rather than a string as well, eg.
#!/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')
You could also use regular expressions on
mmap e.g., case-insensitive search:
if re.search(br'(?i)blabla', s):