Get Line Number of certain phrase in file Python

Posted on

Question :

Get Line Number of certain phrase in file Python

I need to get the line number of a phrase in a text file. The phrase could be:

the dog barked

I need to open the file, search it for that phrase and print the line number.

I’m using Python 2.6 on Windows XP

This Is What I Have:

o = open("C:/file.txt")
j =
if "the dog barked" in j:
     print "Found It"
     print "Couldn't Find It"

This is not homework, it is part of a project I am working on. I don’t even have a clue how to get the line number.

Answer #1:

lookup = 'the dog barked'

with open(filename) as myFile:
    for num, line in enumerate(myFile, 1):
        if lookup in line:
            print 'found at line:', num
Answered By: Zac Brown

Answer #2:

f = open('some_file.txt','r')
line_num = 0
search_phrase = "the dog barked"
for line in f.readlines():
    line_num += 1
    if line.find(search_phrase) >= 0:
        print line_num

EDIT 1.5 years later (after seeing it get another upvote): I’m leaving this as is; but if I was writing today would write something closer to Ash/suzanshakya’s solution:

def line_num_for_phrase_in_file(phrase='the dog barked', filename='file.txt')
    with open(filename,'r') as f:
        for (i, line) in enumerate(f):
            if phrase in line:
                return i
    return -1
  • Using with to open files is the pythonic idiom — it ensures the file will be properly closed when the block using the file ends.
  • Iterating through a file using for line in f is much better than for line in f.readlines(). The former is pythonic (e.g., would work if f is any generic iterable; not necessarily a file object that implements readlines), and more efficient f.readlines() creates an list with the entire file in memory and then iterates through it. * if search_phrase in line is more pythonic than if line.find(search_phrase) >= 0, as it doesn’t require line to implement find, reads more easily to see what’s intended, and isn’t easily screwed up (e.g., if line.find(search_phrase) and if line.find(search_phrase) > 0 both will not work for all cases as find returns the index of the first match or -1).
  • Its simpler/cleaner to wrap an iterated item in enumerate like for i, line in enumerate(f) than to initialize line_num = 0 before the loop and then manually increment in the loop. (Though arguably, this is more difficult to read for people unfamiliar with enumerate.)

See code like pythonista

Answered By: Sacha

Answer #3:

def get_line_number(phrase, file_name):
    with open(file_name) as f:
        for i, line in enumerate(f, 1):
            if phrase in line:
                return i
Answered By: dr jimbob

Answer #4:

suzanshakya, I’m actually modifying your code, I think this will simplify the code, but make sure before running the code the file must be in the same directory of the console otherwise you’ll get error.

file_name = open("file.txt")
for num, line in enumerate(file_name,1):
        if lookup in line:
Answered By: suzanshakya

Answer #5:

Open your file, and then do something like…

for line in f:
    nlines += 1
    if (line.find(phrase) >= 0):
        print "Its here.", nlines

There are numerous ways of reading lines from files in Python, but the for line in f technique is more efficient than most.

Answered By: Amarjeet Ranasingh

Answer #6:

listStr = open("file_name","mode")

if "search element" in listStr:
    print listStr.index("search element")  # This will gives you the line number
Answered By: slezica

Answer #7:

for n,line in enumerate(open("file")):
    if "pattern" in line: print n+1
Answered By: M. kavin babu

Answer #8:

Here’s what I’ve found to work:

f_rd = open(path, 'r')
file_lines = f_rd.readlines()

matches = [line for line in file_lines if "chars of Interest" in line]
index = file_lines.index(matches[0])
Answered By: ghostdog74

Leave a Reply

Your email address will not be published. Required fields are marked *