user6534872
user6534872

Reputation: 73

Python - using raw_input() to search a text document

I am trying to write a simple script that a user can enter what he/she wants to search in a specified txt file. If the word they searching is found then print it to a new text file. This is what I got so far.

import re
import os

os.chdir("C:\Python 2016 Training")
patterns = open("rtr.txt", "r")

what_directory_am_i_in = os.getcwd() 

print what_directory_am_i_in

search = raw_input("What you looking for? ")

for line in patterns:
    re.findall("(.*)search(.*)",  line)
    fo = open("test", "wb")             
    fo.write(line)
    fo.close

This successfully creates a file called test, but the output is nothing close to what word was entered into the search variable.

Any advice appreciated.

Upvotes: 1

Views: 376

Answers (2)

dnit13
dnit13

Reputation: 2496

First of all, you have not read a file

patterns = open("rtr.txt", "r")

this is a file object and not the content of file, to read the file contents you need to use

patterns.readlines()

secondly, re.findall returns a list of matched strings, so you would want to store that. You regex is also not correct as pointed by Hani, It should be

matched = re.findall("(.*)" + search + "(.*)",  line)

rather it should be :

if you want the complete line

matched = re.findall(".*" + search + ".*",  line)

or simply

matched = line if search in line else None

Thirdly, you don't need to keep opening your output file in the for loop. You are overwriting your file everytime in the loop so it will capture only the last result. Also remember to call the close method on the files. Hope this helps

Upvotes: 1

Hani
Hani

Reputation: 1424

you are searching here for all lines that has "search" word in it

you need to get the lines that has the text you entered in the shell

so change this line

re.findall("(.*)search(.*)",  line)

to

re.findall("(.*)"+search+"(.*)",  line)

Upvotes: 0

Related Questions