Получить номер строки определенной фразы в файле Python
мне нужно получить номер строки в текстовом файле. Фраза может быть:
the dog barked
мне нужно открыть файл, найти в нем эту фразу и распечатать номер строки.
Я использую Python 2.6 в Windows XP
Вот Что У Меня Есть:
o = open("C:/file.txt")
j = o.read()
if "the dog barked" in j:
     print "Found It"
else:
     print "Couldn't Find It"
это не домашнее задание, это часть проекта, над которыми я работаю. Я даже не знаю, как узнать номер телефона.
8 ответов
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
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 лет спустя (после того, как он получил еще один upvote): я оставляю это как есть; но если бы я писал сегодня, написал бы что-то ближе к решению Ash/suzanshakya:
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
- используя 
withоткрыть файлы-это идиома pythonic - она гарантирует, что файл будет правильно закрыт, когда блок с помощью файла заканчивается. - итерация через файл с помощью 
for line in fнамного лучше, чемfor line in f.readlines(). Первый является pythonic (например, будет работать еслиfявляется любым общим iterable; не обязательно файловый объект, который реализуетreadlines), и более эффективным!--7--> создает список со всем файлом в памяти, а затем перебирает его. *if search_phrase in line- это более подходящие для Python, чемif line.find(search_phrase) >= 0, так как это не требуетlineдля реализацииfind, читает более легко, чтобы увидеть, что предназначено, и не легко облажаться (например,if line.find(search_phrase)иif line.find(search_phrase) > 0оба не будут работать для всех случаев, так как find возвращает индекс первого совпадения или -1). - его проще / чище обернуть повторяющийся элемент в 
enumerateкакfor i, line in enumerate(f)не удалось инициализироватьline_num = 0перед циклом, а затем вручную инкремент в цикле. (Хотя, возможно, это труднее читать для людей, незнакомых сenumerate.) 
посмотреть код, как pythonista
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
suzanshakya, я фактически изменяю ваш код, я думаю, что это упростит код, но убедитесь, что перед запуском кода файл должен быть в том же каталоге консоли, иначе вы получите ошибку.
lookup="The_String_You're_Searching"
file_name = open("file.txt")
for num, line in enumerate(file_name,1):
        if lookup in line:
            print(num)
откройте файл, а затем сделайте что-то вроде...
for line in f:
    nlines += 1
    if (line.find(phrase) >= 0):
        print "Its here.", nlines
существует множество способов чтения строк из файлов в Python, но for line in f техника более эффективна, чем большинство.
list = open("file_name","mode")
if "search element" in list:
    print list.index("search element")  # This will gives you the line number
вот что я нашел работу:
f_rd = open(path, 'r')
file_lines = f_rd.readlines()
f_rd.close()
matches = [line for line in file_lines if "chars of Interest" in line]
index = file_lines.index(matches[0])