user1480135
user1480135

Reputation: 187

Read next line in Python

I am trying to figure out how to search for a string in a text file, and if that string is found, output the next line.

I've looked at some similar questions on here but couldn't get anything from them to help me.

This is the program I have made. I have made it solely to solve this specific problem and so it's also probably not perfect in many other ways.

def searcher():
    print("Please enter the term you would like the definition for")
    find = input()
    with open ('glossaryterms.txt', 'r') as file:
        for line in file:
            if find in line:
                print(line)

So the text file will be made up of the term and then the definition below it.

For example:

Python
A programming language I am using

If the user searches for the term Python, the program should output the definition.

I have tried different combinations of print (line+1) etc. but no luck so far.

Upvotes: 7

Views: 38387

Answers (4)

ZdaR
ZdaR

Reputation: 22954

If your filesize is small, then you may simply read the file by using readlines() which returns a list of strings each delimited by \n character, and then find the index of the selected word, and the print the item at position + 1 in the given list.

This can be done as:

def searcher():
    print("Please enter the term you would like the definition for")
    find = input()

    with open("glossaryterms.txt", "r") as f:       
        words = list(map(str.strip, f.readlines()))
        try: 
            print(words[words.index(find) + 1])
        except:
            print("Sorry the word is not found.")

Upvotes: 4

Paweł Kordowski
Paweł Kordowski

Reputation: 2768

your code is handling each line as a term, in the code below f is an iterator so you can use next to move it to the next element:

with open('test.txt') as f:
    for line in f:
        nextLine = next(f)
        if 'A' == line.strip():
            print nextLine

Upvotes: 9

Ben
Ben

Reputation: 683

You could try it Quick and dirty with a flag.

with open ('glossaryterms.txt', 'r') as file:
  for line in file:
    if found:
        print (line)
        found = False
    if find in line:
        found = True

It's just important to have the "if found:" before setting the flag. So if you found your search term next iteration/line will be printed.

Upvotes: 2

meiamsome
meiamsome

Reputation: 2944

In my mind, the easiest way would be to cache the last line. This means that on any iteration you would have the previous line, and you'd check on that - keeping the loop relatively similar

For example:

def searcher():
    last_line = ""
    print("Please enter the term you would like the definition for")
    find = input()
    with open ('glossaryterms.txt', 'r') as file:
        for line in file:
            if find in last_line:
                print(line)
            last_line = line

Upvotes: 1

Related Questions