Kai Mou
Kai Mou

Reputation: 406

Python searching for exact word/phrase within a text file

Currently, I'm trying to search for an exact word/phrase in a text file. I am using Python 3.4

Here is the code I have so far.

import re

def main():
    fileName = input("Please input the file name").lower()
    term = input("Please enter the search term").lower()

    fileName = fileName + ".txt"

    regex_search(fileName, term)

def regex_search(file,term):
    source = open(file, 'r')
    destination = open("new.txt", 'w')
    lines = []
    for line in source:
        if re.search(term, line):
            lines.append(line)

    for line in lines:
        destination.write(line)
    source.close()
    destination.close()
'''
def search(file, term): #This function doesn't work
    source = open(file, 'r')
    destination = open("new.txt", 'w')
    lines = [line for line in source if term in line.split()]

    for line in lines:
        destination.write(line)
    source.close()
    destination.close()'''
main()

In my function regex_search I use regex to search for the particular string. However, I don't know how to search for a particular phrase.

In the second function, search, I split the line into a list and search for the word in there. However, this won't be able to search for a particular phrase because I am searching for ["dog walked"] in ['the','dog','walked'] which won't return the correct lines.

Upvotes: 0

Views: 2947

Answers (1)

tdelaney
tdelaney

Reputation: 77337

edit: Considering that you don't want to match partial words ('foo' should not match 'foobar'), you need to look ahead in the data stream. The code for that is a bit awkward, so I think regex (your current regex_search with a fix) is the way to go:

def regex_search(filename, term):
    searcher = re.compile(term + r'([^\w-]|$)').search
    with open(file, 'r') as source, open("new.txt", 'w') as destination:
        for line in source:
            if searcher(line):
                destination.write(line)

Upvotes: 3

Related Questions