JCBK JCBK - 1 year ago 146
Python Question

Search for string in txt file Python

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

for some reason. Can anyone see what is wrong?

def check():
datafile = file('example.txt')
found = False
for line in datafile:
if blabla in line:
found = True

if True:
print "true"
print "false"

Answer Source

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. 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:

You could also use regular expressions on mmap e.g., case-insensitive search: if'(?i)blabla', s):