Как найти номер строки в питоне

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 = o.read()
if "the dog barked" in j:
     print "Found It"
else:
     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.

asked Oct 18, 2010 at 16:41

Zac Brown's user avatar

Zac BrownZac Brown

5,86719 gold badges57 silver badges106 bronze badges

2

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 Oct 18, 2010 at 16:53

Sacha's user avatar

SachaSacha

3,7482 gold badges16 silver badges10 bronze badges

5

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 Oct 18, 2010 at 16:46

dr jimbob's user avatar

dr jimbobdr jimbob

16.9k7 gold badges58 silver badges80 bronze badges

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

print get_line_number("the dog barked", "C:/file.txt")  # python2

#print(get_line_number("the dog barked", "C:/file.txt"))  # python3

answered Oct 18, 2010 at 16:54

suzanshakya's user avatar

suzanshakyasuzanshakya

3,4141 gold badge25 silver badges22 bronze badges

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.

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)

Eric Aya's user avatar

Eric Aya

69.1k35 gold badges179 silver badges250 bronze badges

answered Jan 16, 2018 at 11:31

Amarjeet Ranasingh's user avatar

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 Oct 18, 2010 at 16:45

slezica's user avatar

slezicaslezica

72.3k25 gold badges101 silver badges163 bronze badges

8

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

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

Community's user avatar

answered Nov 13, 2013 at 10:26

M. kavin babu's user avatar

1

You can use list comprehension:

content = open("path/to/file.txt").readlines()

lookup = 'the dog barked'

lines = [line_num for line_num, line_content in enumerate(content) if lookup in line_content]

print(lines)

answered Oct 13, 2020 at 8:38

Alon Barad's user avatar

Alon BaradAlon Barad

1,2671 gold badge13 silver badges23 bronze badges

for n,line in enumerate(open("file")):
    if "pattern" in line: print n+1

answered Oct 19, 2010 at 0:21

ghostdog74's user avatar

ghostdog74ghostdog74

319k56 gold badges255 silver badges342 bronze badges

Here’s what I’ve found to work:

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])

answered Oct 2, 2015 at 19:50

Onkar Raut's user avatar

It’s been a solid while since this was posted, but here’s a nifty one-liner. Probably not worth the headache, but just for fun :)

from functools import reduce 
from pathlib import Path

my_lines       = Path('path_to_file').read_text().splitlines()       
found, linenum = reduce(lambda a, b: a if a[0] else (True, a[1]) if testid in b else (False, a[1]+1), [(False,0)] + my_lines)
            
print(my_lines[linenum]) if found else print(f"Couldn't find {my_str}")

Note that if there are two instances in the file, it wil

answered May 3, 2022 at 4:14

optimus_prime's user avatar

optimus_primeoptimus_prime

1,0301 gold badge10 silver badges21 bronze badges

An one-liner solution:

l_num = open(file).read()[:open(file).read().index(phrase)].count('n') + 1

and an IO safer version:

l_num = (h.close() or ((f := open(file, 'r', encoding='utf-8')).read()[:(f.close() or (g := open(file, 'r', encoding='utf-8')).read().index(g.close() or phrase))].count('n'))) if phrase in (h := open(file, 'r', encoding='utf-8')).read() else None

Explain:

file = 'file.txt'
phrase = 'search phrase'
with open(file, 'r', encoding='utf-8') as f:
    text = f.read()
    if phrase in text:
        phrase_index = text.index(phrase)
        l_num = text[:phrase_index].count('n') + 1  # Nth line has n-1 'n's before
    else:
        l_num = None

answered May 13, 2022 at 10:35

KumaTea's user avatar

KumaTeaKumaTea

4385 silver badges13 bronze badges

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 = o.read()
if "the dog barked" in j:
     print "Found It"
else:
     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.

asked Oct 18, 2010 at 16:41

Zac Brown's user avatar

Zac BrownZac Brown

5,86719 gold badges57 silver badges106 bronze badges

2

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 Oct 18, 2010 at 16:53

Sacha's user avatar

SachaSacha

3,7482 gold badges16 silver badges10 bronze badges

5

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 Oct 18, 2010 at 16:46

dr jimbob's user avatar

dr jimbobdr jimbob

16.9k7 gold badges58 silver badges80 bronze badges

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

print get_line_number("the dog barked", "C:/file.txt")  # python2

#print(get_line_number("the dog barked", "C:/file.txt"))  # python3

answered Oct 18, 2010 at 16:54

suzanshakya's user avatar

suzanshakyasuzanshakya

3,4141 gold badge25 silver badges22 bronze badges

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.

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)

Eric Aya's user avatar

Eric Aya

69.1k35 gold badges179 silver badges250 bronze badges

answered Jan 16, 2018 at 11:31

Amarjeet Ranasingh's user avatar

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 Oct 18, 2010 at 16:45

slezica's user avatar

slezicaslezica

72.3k25 gold badges101 silver badges163 bronze badges

8

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

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

Community's user avatar

answered Nov 13, 2013 at 10:26

M. kavin babu's user avatar

1

You can use list comprehension:

content = open("path/to/file.txt").readlines()

lookup = 'the dog barked'

lines = [line_num for line_num, line_content in enumerate(content) if lookup in line_content]

print(lines)

answered Oct 13, 2020 at 8:38

Alon Barad's user avatar

Alon BaradAlon Barad

1,2671 gold badge13 silver badges23 bronze badges

for n,line in enumerate(open("file")):
    if "pattern" in line: print n+1

answered Oct 19, 2010 at 0:21

ghostdog74's user avatar

ghostdog74ghostdog74

319k56 gold badges255 silver badges342 bronze badges

Here’s what I’ve found to work:

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])

answered Oct 2, 2015 at 19:50

Onkar Raut's user avatar

It’s been a solid while since this was posted, but here’s a nifty one-liner. Probably not worth the headache, but just for fun :)

from functools import reduce 
from pathlib import Path

my_lines       = Path('path_to_file').read_text().splitlines()       
found, linenum = reduce(lambda a, b: a if a[0] else (True, a[1]) if testid in b else (False, a[1]+1), [(False,0)] + my_lines)
            
print(my_lines[linenum]) if found else print(f"Couldn't find {my_str}")

Note that if there are two instances in the file, it wil

answered May 3, 2022 at 4:14

optimus_prime's user avatar

optimus_primeoptimus_prime

1,0301 gold badge10 silver badges21 bronze badges

An one-liner solution:

l_num = open(file).read()[:open(file).read().index(phrase)].count('n') + 1

and an IO safer version:

l_num = (h.close() or ((f := open(file, 'r', encoding='utf-8')).read()[:(f.close() or (g := open(file, 'r', encoding='utf-8')).read().index(g.close() or phrase))].count('n'))) if phrase in (h := open(file, 'r', encoding='utf-8')).read() else None

Explain:

file = 'file.txt'
phrase = 'search phrase'
with open(file, 'r', encoding='utf-8') as f:
    text = f.read()
    if phrase in text:
        phrase_index = text.index(phrase)
        l_num = text[:phrase_index].count('n') + 1  # Nth line has n-1 'n's before
    else:
        l_num = None

answered May 13, 2022 at 10:35

KumaTea's user avatar

KumaTeaKumaTea

4385 silver badges13 bronze badges

Python найти номер строки

Как найти номер строки с заданным вхождением в Python?

Предлагаю решить задачу на поиск номера строки с заданным вхождением. А для того, чтобы поиски продвигались активнее, представим, что перед нами находится огромный текстовый файл, в котором тысячи строк. И лишь одна из них содержит фразу «я здесь ни при чем». А номер этой строки — недостающая часть кода от сейфа с деньгами. Думаю, мы легко справимся с заданием при помощи Python! Только составим предварительно ТЗ.

Кстати, а что, если в файле несколько строк с искомой фразой, и нам нужно вывести номера всех этих строк? Этот вариант мы не оставим без внимания и обязательно рассмотрим в этой статье в задаче №2. А сейчас приступим к решению первой задачи!

Задача №1: Поиск номера первой строки с заданным вхождением

Техническое задание:

Цель: вывести на экран номер строки, в которой содержится фраза: «я здесь ни при чем». Если таких строк несколько, выводим номер первой строки.

Порядок выполнения:

1. Инициализировать файл, в котором будем осуществлять поиск, а также определить искомую фразу.

2. Открыть заданный файл и произвести построчное считывание текста.

3. При считывании каждую строку файла проверять на вхождение фразы: «я здесь ни при чем». Если фраза в строке найдена, остановить построчное считывание и вывести номер строки на экран.

4. В заключение (исключительно в тренировочных целях!), оформим написанный код в функцию и осуществим ее вызов.

Для тренировки мы возьмем короткий файл — в нем легче протестировать работу нашего кода. Файл под названием «cats_fault.txt» следующего вида:

Если в домике бардак,
Это котик виноват -
Не помыл посуду кот,
Думал, что и так сойдет
Не заправил кот кровать,
Начал с книжками играть..
И белье не постирал,
и обед он наш украл..
В-общем, я здесь ни при чем,
Это котик виноват :-)

Решение:

1. Инициализируем переменные:

Для начала укажем Питону, какой файл он проглотит на обед и где этот файл находится:

# Путь к текстовому файлу - замените на путь, по которому расположен файл на Вашем компьютере
file_path = "path_to_file"

В приведенной выше строчке кода нужно поменять «path_to_file» на путь к вашему файлу. Если вы новичок и не знаете, как задать путь к файлу, прочитайте инструкцию по ссылке: «Как задать путь к файлу».

Затем определим искомую фразу:

# Путь к текстовому файлу - замените на путь, по которому расположен файл на Вашем компьютере
file_path = "path_to_file"

# Какую фразу будем искать:
required = 'я здесь ни при чем'

2. Открываем файл и построчно считываем данные:

Откроем файл с помощью конструкции with open и оформим построчное считывание из файла с помощью функции enumerate() так, чтобы номер строки считывался в переменную num_line, а сама строка — в переменную line:

# Путь к текстовому файлу - замените на путь, по которому расположен файл на Вашем компьютере
file_path = "path_to_file"

# Какую фразу будем искать:
required = 'я здесь ни при чем'

# Считываем данные
with open(file_path) as file:
    for num_line, line in enumerate(file):

Подробнее о построчном чтении файла можно прочитать по ссылке в статье «Построчное чтение файла в Python 3».

3. Проверяем строки на вхождение искомой фразы

Добавим в цикл for проверку каждой считанной строки на вхождение фразы required. Как только такая строка будет найдена, выведем ее номер и выйдем из цикла с помощью break:

# Путь к текстовому файлу - замените на путь, по которому расположен файл на Вашем компьютере
file_path = "path_to_file"

# Какую фразу будем искать:
required = 'я здесь ни при чем'

# Считываем данные
with open(file_path) as file:
    for num_line, line in enumerate(file):
        if required in line:
            print(num_line)
            break

Цель достигнута: номер строки найден!

Запускаем код и тестируем его работоспособность. Номер строки с фразой «я здесь ни при чем» выведен правильно! Обратите внимание, что по умолчанию, функция enumerate() производит нумерацию строк с нуля(не с единицы!), поэтому программа вывела на экран номер строки: 8.

Наведем красоту — поместим код в функцию!

Несмотря на то, что цель достигнута и программа успешно выводит номер строки с искомой фразой, предлагаю еще немного поработать. Давайте упакуем написанный код в функцию, а затем осуществим ее вызов с заданными параметрами: путем к файлу и искомой фразой. Выглядеть это будет так:

# Путь к текстовому файлу - замените на путь, по которому расположен файл на Вашем компьютере
file_path = "path_to_file"
# Затем определим искомую фразу:
required = 'я здесь ни при чем'

# Функция для поиска номера строки
def find_string_number(path_to_file, required):
    with open(path_to_file) as file:
        for num_line, line in enumerate(file):
            if required in line:
                return(num_line)
    return('Ни одной строки с заданным содержанием не нашлось. Sorry. Это котик виноват')

# Осуществим вызов функции
string_number = find_string_number(file_path, required)
print(string_number)
<strong>Результат работы скрипта:</strong>
<strong>8</strong>

Как работает скрипт?

Описанная выше функция find_string_number содержит два параметра: путь к файлу path_to_file и искомую фразу required. После открытия файла, производим построчное считывание с помощью функции enumerate(), в результате чего номер текущей строки считывается в переменную num_line, а текст строки в переменную line. В цикле if проверяем вхождение фразы required в строку line. Если вхождение найдено, то возвращаем номер строки и выходим из цикла for. Если после проверки всех строк, вхождение не было выявлено, возвращаем сообщение о провале операции: ‘Ни одной строки с заданным содержанием не нашлось. Sorry. Это котик виноват’.

Отлично! Мы справились с заданием и научились находить первую строку в файле с искомой фразой! Теперь, опираясь на написанный выше код, мы легко сможем решить похожую задачу. На этот раз предлагаю не ограничиваться номером первой найденной строки, а вывести номера всех строк, содержащих искомую фразу! Да, и фразу поменяем: будем искать подстроку, порочащую честь ушастого: «Это котик виноват».

Задача №2: Выводим номера всех строк, содержащих искомое вхождение

Техническое задание:

Цель: вывести на экран номера всех строк, в которых содержится фраза: «Это котик виноват».

Порядок выполнения:

1. Инициализировать файл, в котором будем осуществлять поиск, а также определить искомую фразу.

2. Открыть заданный файл и произвести построчное считывание текста. При считывании каждую строку файла проверять на вхождение фразы: «это котик виноват». Если фраза в строке найдена, добавить номер строки в список string_numbers. Вывести все элементы списка string_numbers на экран.

Решение:

1. Инициализация переменных

Прежде всего предлагаю определиться, куда мы будем складывать найденные номера строк? На мой взгляд, массив — вполне пригодная тара для такого хранения. Поэтому помимо пути к файлу и переменной для хранения искомой фразы, инициализируем список: string_numbers:

# Путь к текстовому файлу - замените на путь, по которому расположен файл на Вашем компьютере
file_path = "path_to_file"
# Искомая фраза:
required = 'Это котик виноват'
# Пустой список для хранения найденных номеров строк
string_numbers = []

2. Открываем файл, построчно считываем содержимое файла и проверяем каждую строку на вхождение подстроки required. Если вхождение найдено, добавляем номер строки в конец списка string_numbers. После проверки всех строк, выводим список на экран:

# Путь к текстовому файлу - замените на путь, по которому расположен файл на Вашем компьютере
file_path = "path_to_file"
# Искомая фраза:
required = 'Это котик виноват'
# Пустой список для хранения найденных номеров строк
string_numbers = []

with open(file_path) as file:
    for num_line, line in enumerate(file):
        if required in line:
            string_numbers.append(num_line)
print(string_numbers)

В результате работы скрипт отыскал 2 строки с вхождением required и вывел их в виде списка на экран:

<strong>[1, 9]</strong>

Финальное преображение кода: создаём функцию поиска номеров строк с заданным вхождением

А теперь, тренировки ради, предлагаю оформить написанный выше полезный код в красивую функцию под названием find_string_numbers() с двумя параметрами: file_path — содержит путь к файлу и required — содержит искомую фразу:

# Путь к текстовому файлу - замените на путь, по которому расположен файл на Вашем компьютере
file_path = "path_to_file"
# Искомая фраза:
required = 'Это котик виноват'
# Пустой список для хранения найденных номеров строк
string_numbers = []

# Функция возвращает список номеров строк с заданным вхождением:
def find_string_numbers(path_to_file, required_text):
    with open(path_to_file) as file:
        for num_line, line in enumerate(file):
            if required_text in line:
                string_numbers.append(num_line)
        if(len(string_numbers)>0):
            return(string_numbers)
        else:
            return("Ни одной строки с заданным содержанием не нашлось. Sorry. Это котик виноват")
string_numbers = find_string_numbers(file_path, required)
print(string_numbers)

В данном варианте, после прохождения цикла for и проверки всех считанных строк, добавлена проверка на длину списка. Если длина списка больше нуля, это значит, что, как минимум, одна строка содержит искомую фразу и функция find_string_numbers() возвращает список с номерами строк. В противном случае, функция вернет сообщение «Ни одной строки с заданным содержанием не нашлось. Sorry. Это котик виноват».

Подводим итог

Как показывает практика, в Python приятно иметь дело с файлами. Если открывать файл с помощью конструкции with, то можно не беспокоиться о его закрытии — python сделает эту работу за нас. А функция enumerate() самостоятельно пронумерует все строки файла. Так что нам останется проявить лишь немного навыков работы с циклами, чтобы с позволения Python найти номер строки (или отыскать все строки) с заданным вхождением.

Добрый вечер! Подскажите есть ли какой то оператор который будет искать заданный текст в текстовом документе и выводить в какой строке он это нашёл. И если не нашёл изменял переменную? Или это всё таки надо делать на циклах. Если туплю не бейте. Мне 13.


  • Вопрос задан

    более трёх лет назад

  • 4455 просмотров

Используйте enumerate():

with open('text.txt', 'rt') as file:
    for index, line in enumerate(file):
        if pattern in line:
            print(index)

Причем вторым параметром в enumerate можно передать номер начала отсчёта — например, начать с 1, а не с нуля (по умолчанию). В переменной index будет номер текущей строки.

Пригласить эксперта

Отдельного нет, но там итак не сложно. Открыть документ, инициализировать счетчик и считывать построчно, проверяя вхождение текста в считанную строку, пока не найдем. Примерно так

search_string = 'mytext'
with open("myfile.txt") as f:
	n = 0
	for line in f:
		n += 1
		if search_string in line:
			print(search_string, 'found on line', n)


  • Показать ещё
    Загружается…

15 янв. 2023, в 01:27

6500 руб./за проект

15 янв. 2023, в 00:37

3500 руб./за проект

15 янв. 2023, в 00:14

3000 руб./за проект

Минуточку внимания

Cufee

2 / 1 / 1

Регистрация: 16.09.2021

Сообщений: 56

1

Как узнать номер строки и вывести ее

16.12.2022, 11:31. Показов 269. Ответов 3

Метки нет (Все метки)


есть такая программа:

Python
1
2
3
f = open('input.txt','r')
word = 'BMW'
print('+' if word in f.read() else '-')

задача состоит в том, если имеется слово которое ввел пользователь, вывелся номер строки и вся целая строка, как это реализовать?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Йуный падаван

Эксперт PythonЭксперт Java

13753 / 8008 / 2455

Регистрация: 21.10.2017

Сообщений: 19,412

16.12.2022, 11:36

2

Очевидно, перебирать строки. И при искомом совпадении вывести строку и номер.
enumerate и readlines в помощь



0



2 / 1 / 1

Регистрация: 16.09.2021

Сообщений: 56

16.12.2022, 11:56

 [ТС]

3

iSmokeJC, все круто здорово, но вот он ищет только по первому слову из строки, а у меня к примеру есть база, как сделать поиск по всем словам из текстового документа?



0



Йуный падаван

Эксперт PythonЭксперт Java

13753 / 8008 / 2455

Регистрация: 21.10.2017

Сообщений: 19,412

16.12.2022, 12:00

4

Перебирать эти слова в цикле и искать.
Или в человеческую БД положить и искать средствами самой БД.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

16.12.2022, 12:00

Помогаю со студенческими работами здесь

Как узнать номер строки в ListBox?
У меня есть на форме несколько ListBox и я хочу чтобы при удалении строчки из одного ListBox,…

Как узнать номер счетчика у строки
Здравствуйте!
есть бд типографии, и есть таблица с заказами. В ней столбцы( id_zakaz, id_uslygi,…

Как вывести номер строки и номер столбца минимального числа матрицы в label?
достаточно ли будет просто указать?
label1.caption:=floattostrf(matrxix, fffixed,10,2);…

Как узнать номер строки в файле по слову?
как узнать номер строки в файле по слову на C#

Как узнать порядковый номер строки Interbase
Есть таблица без уникальных чисел,содежащая в себе 2 столбца,один стринг другой интегер, который…

Как узнать номер последней строки с данными?
На листе много данных и это — постоянно меняющаяся величина.

До сего момента пользовался двумя…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

4

Я хочу узнать номер строки текстового файла. Как я могу это сделать?

4 ответы

при итерации по файлу:

for line_no, line in enumerate(f, start=1):

или при подсчете строк в файле (f):

count = sum( 1 for line in f )

Создан 11 июля ’11, 02:07

f = open('textfile.txt', 'rb')
len(f.readlines())

Метод readlines () возвращает список, в котором каждый индекс содержит строку textfile.txt.

Создан 07 июля ’11, 02:07

f = open("file.text")
count = sum(1 for line in f)

что эквивалентно

count = 0
for line in f:
   count+=1

Создан 07 июля ’11, 02:07

Как сказал @Dan D., вы можете использовать перечислить () в открытом файле. По умолчанию отсчет начинается с 0, поэтому, если вы хотите начать отсчет строк с 1 (или чего-то еще), используйте start аргумент при вызове enumerate (). Кроме того, использование «файл» в качестве имени переменной считается плохой практикой, поскольку существует функция под этим именем. Таким образом, попробуйте что-то вроде:

for line_no, line in enumerate(open(file_name), start=1):
    print line_no, line

Создан 11 июля ’11, 02:07

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

python

or задайте свой вопрос.

Мне нужно получить номер строки фразы в текстовом файле. Фраза может быть:

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"

Это не домашнее задание, это часть проекта, над которым я работаю. Я даже не знаю, как получить номер строки.

18 окт. 2010, в 19:34

Поделиться

Источник

7 ответов

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

Sacha
18 окт. 2010, в 17:30

Поделиться

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

РЕДАКТИРОВАТЬ 1,5 года спустя (увидев, что он получил еще один взлет): я оставляю это как есть; но если бы я писал сегодня, то писал бы что-то поближе к решению 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 для открытия файлов — это питоническая идиома — это гарантирует, что файл будет правильно закрыт, когда блок, использующий файл, закончится.
  • Итерирование через файл с помощью for line in f намного лучше, чем for line in f.readlines(). Первый является pythonic (например, будет работать, если f является любым общим итерабельным, не обязательно файловым объектом, который реализует readlines), а более эффективный f.readlines() создает список со всем файлом в памяти и затем выполняет итерацию через него, * if search_phrase in line более pythonic, чем 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

dr jimbob
18 окт. 2010, в 16:54

Поделиться

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
18 окт. 2010, в 18:52

Поделиться

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

if "search element" in list:
    print list.index("search element")  # This will gives you the line number

M. kavin babu
13 нояб. 2013, в 11:52

Поделиться

Откройте файл, а затем сделайте что-то вроде…

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

Существует множество способов чтения строк из файлов в Python, но метод for line in f более эффективен, чем большинство.

slezica
18 окт. 2010, в 17:19

Поделиться

Вот что я нашел для работы:

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])

Onkar Raut
02 окт. 2015, в 20:50

Поделиться

for n,line in enumerate(open("file")):
    if "pattern" in line: print n+1

ghostdog74
19 окт. 2010, в 00:36

Поделиться

Ещё вопросы

  • 0дефектное выравнивание в Mozilla Firefox, а в Chrome все нормально
  • 0CSS — выровнять динамически созданный выпадающий список
  • 1Изменение стиля прогресс-бара
  • 0Формат даты и времени в формате MySQL по умолчанию
  • 0Заменить N вхождений строки двумя в выборке
  • 1Python Spark локальный параллелизм
  • 0Информация об ограничении скорости доступа API Instagram с определенным классом PHP
  • 0drupal_write_record в drupal 6 возвращает false
  • 1Как загрузить сырое растровое изображение без масштабирования на Android?
  • 0Программа Студенческая Запись
  • 0Добавление списка с использованием jQuery конфликтует с остальной частью сайта
  • 1Веб-сокеты Python: как переопределить метод синхронизации WebSocketCommonProtocol.connection_made () с помощью асинхронного вызова?
  • 0Результат поиска с несколькими таблицами, такими как Query CodeIgniter
  • 0найти ближайший промежуток по своему классу в tr
  • 1Как заменить все совпадающие массивы, которые существуют в большом двумерном массиве, используя python?
  • 1Простая аутентификация для сервлета Java, работающего в Geronimo
  • 0Угловой SweetAlert с директивами и переводить
  • 1Установка фонового изображения для itempage.xaml
  • 0AfxGetApp () -> m_lpCmdLine для QT?
  • 0Хранение массивов целых чисел в куче и доступ к ним через указатели
  • 1Кодирование необработанного аудио в mp3 / ogg
  • 1Signalr восстанавливает связь навсегда после перезагрузки IIS AppPool
  • 1ACTION_MEDIA_BUTTON не работает на реальном устройстве
  • 0Привет мастерам кода, мне нужно посоветовать прыгающее изображение с помощью jquery
  • 1Чтение Java из файла и отправка с использованием DataOutputStream
  • 1Запросы к локальному серверу, на котором выполняется SparkJava, работают с почтальоном, но не с JavaScript в браузере
  • 0Конвейерная обработка активов в простом HTML-проекте
  • 0NodeJS + Socket.io Обработчик события подключения не вызывается успешно?
  • 1Правильный метод для изменения содержимого EditText в событии OnTextChanged
  • 1подключение к Java Magento SOAP API
  • 1Maven управляет зависимостями через другого пользователя
  • 0Как показать наведите курсор мыши на элемент с Javascript?
  • 0Выровнять по вертикали: полное объяснение
  • 1@Angular — общий блок получает ленивый загруженный контент при сборке
  • 0Использование стеков и статических массивов
  • 0Добавление другой ссылки после идентификатора не вызывает дочернее состояние
  • 1Массив Angular 2: классифицировать на наборы данных на основе пользовательского ввода
  • 1ushort Операции Throwing Int Cast Ошибки
  • 1Почему не заполняется listView?
  • 0Рисование нескольких фигур с помощью QPainter в одном окне?
  • 0Объект кнопки на этикетке
  • 1Установите xTime в состояние внутри KeyEvent
  • 0условный оператор ELEMENT, содержащий jQuery
  • 0Создание аналитики PHP для каждого профиля пользователя
  • 1У класса нет ошибки атрибута из возвращенных данных
  • 0JQuery UI диалоговое окно автоматически закрыть с setTimeout
  • 0Я должен прокрутить вниз автоматически, если на странице есть анимация
  • 0как сохранить свернутое состояние панели при обновлении страницы
  • 0Как по-разному стилизовать каждый последний элемент каждой строки / строки?
  • 0Как динамически менять контент и стилизацию веб-страницы?

Сообщество Overcoder

мне нужно получить номер строки в текстовом файле. Фраза может быть:

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)

2

автор: Amarjeet Ranasingh


откройте файл, а затем сделайте что-то вроде…

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

for n,line in enumerate(open("file")):
    if "pattern" in line: print n+1

вот что я нашел работу:

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])

  • Как найти номер страхового полюса
  • Как найти номер старых водительских прав
  • Как найти номер старого водительского удостоверения
  • Как найти номер сотового человека
  • Как найти номер сотового телефона