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

I want to know the number of row of a text file.
How can I do this?

asked Jul 7, 2011 at 0:58

Ben's user avatar

2

if iterating over a file:

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

or if counting the lines in a file (f):

count = sum( 1 for line in f )

hughdbrown's user avatar

hughdbrown

47.4k20 gold badges85 silver badges107 bronze badges

answered Jul 7, 2011 at 1:01

Dan D.'s user avatar

Dan D.Dan D.

72.8k15 gold badges103 silver badges123 bronze badges

2

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

readlines() method returns a list where each index holds a line of textfile.txt.

answered Jul 7, 2011 at 1:05

romeroqj's user avatar

romeroqjromeroqj

8293 gold badges10 silver badges20 bronze badges

4

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

which is equivalent to

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

answered Jul 7, 2011 at 1:10

SpliFF's user avatar

SpliFFSpliFF

38.1k16 gold badges90 silver badges119 bronze badges

As @Dan D. said, you can use enumerate() on the open file. The default is to start counting with 0, so if you want to start the line count at 1 (or something else), use the start argument when calling enumerate(). Also, it’s considered poor practice to use «file» as a variable name, as there is a function by that name. Thus, try something like:

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

answered Jul 7, 2011 at 1:09

GreenMatt's user avatar

GreenMattGreenMatt

18.2k7 gold badges53 silver badges79 bronze badges

1

У меня есть 2 файла. В одном и в другом построчно написаны данные. Мне нужно взять определенную строку в одном файле и по номеру строки найти данные в другом файле (может это можно сделать и не по номеру строки). Можете объяснить как это лучше сделать в плане кода. При том что в файлах разные данные и каждая строка одного файла связана с каждой строкой другого. Мне нужно взять данные из второго файла, зная в каком ряду нужные мне данные в первом файле.

Первый файл:

14CaBzRbZDuGJCAdu9CZsbrCfyv4K7f7sf;31 
0xd4FD252d7D2C9479a8d616F510eAC6243B5DDdf9;3 
3Dxvjt7N8sbeUoTbASF5dBqEeSMc1o7Pk1;12 
0x944680402B2Ba554f978714b6039755ED10e7466;8

Второй файл:

0.0
0.0
7.91778246
0.5476858867775038

задан 4 авг 2020 в 8:15

fantazy's user avatar

10

попробуйте так:

line = 2

with open("fil1_1.txt", "r") as f1, open("fil1_2.txt", "r") as f2:
    rows_1 = f1.readlines()
    rows_2 = f2.readlines()

if len(rows_1) > line and len(rows_2) > line:
    print(f'стоке                {rows_1[line]}'
          f'соответствует строка {rows_2[line]} (соответствие по номеру записи)')

А как мне узнать номер строки в первом файле? Или может как то по другому можно решить вопрос?

rows_1 = ['item1', 'item2', 'item3', 'item4',]

rows_1.index('item1')  # 0
rows_1.index('item2')  # 1
rows_1.index('item3')  # 2
# ...

ответ дан 4 авг 2020 в 9:30

S. Nick's user avatar

S. NickS. Nick

70.2k96 золотых знаков36 серебряных знаков55 бронзовых знаков

6

Если файл большой

with open("first file", "r") as first, open("second file", "r") as second:
    while True:
        try:
            f_line = next(first).strip()
            s_line = next(second).strip()
            print(f_line, s_line)
        except StopIteration:
            exit(0)

Если не большой)

with open("first file", "r") as first, open("second file", "r") as second:
    one = (x.strip() for x in first)
    two = (x.strip() for x in second)
    coins = dict(zip(one, two))

print(coins)

ответ дан 6 авг 2020 в 9:50

alex's user avatar

alexalex

2,6775 серебряных знаков13 бронзовых знаков

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


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

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

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

Используйте 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)


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

28 мая 2023, в 22:16

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

28 мая 2023, в 21:40

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

28 мая 2023, в 21:33

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

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

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. Это котик виноват’.

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

У нас появился Telegram-канал для изучающих Python! Подписывайтесь по ссылке: «Кодим на Python! Вместе «питонить» веселее! 😉

Задача №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 найти номер строки (или отыскать все строки) с заданным вхождением.

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

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Ошибки malloc при передаче ссылок cv: Mat
  • 0Сделайте, чтобы переменная PHP была распознана
  • 0Предоставление опытным пользователям права на прямой запуск SQL-запросов
  • 1Почему новый сеанс создается до того, как я войду в систему?
  • 0как прекратить действия с помощью JavaScript
  • 1MediaPlayerClass: MediaPlayer запускается без какого-либо очевидного кода
  • 0нумерация страниц в формате mpdf {PAGENO} с помощью шаблонного механизма smarty
  • 0Gmail SMTP с использованием CodeIgniter
  • 0Как добавить разные цвета для диапазона значений в Grey_CircularLinearGauge из DOJO
  • 0При нажатии на миниатюру изображение должно отображаться в отдельном разделе.
  • 1Почему PageableListView не имеет конструктора без модели или списка
  • 1Регулярный экспресс для таких шаблонов, как 1.1, 2.-1, 2.3.30
  • 1Кросс-компиляция платформ
  • 1Launcher на операционной системе Android
  • 1Новый экземпляр программы создается при прикосновении к тегу NFC
  • 1Веб-сайт Azure Подключение к базе данных Azure отлично работает на локальных, но не развернутых
  • 1Play Framework во время выполнения ошибка на OS X
  • 1Полное удаление дублированных данных без сохранения одного
  • 1JTextField Width
  • 1Crypto JS: TripleDES неправильно шифрует
  • 0PHP time () для Date / Time, возвращающих странные результаты
  • 0Передать переменную в контроллер codeigniter по умолчанию
  • 0динамическая настройка высоты div, чтобы нижний колонтитул был внизу, если содержимое не заполняет окно
  • 0isset не работает при отправке формы (на самом деле проблема с БД)
  • 1Есть ли в Android Studio ярлык для перехода из текущего файла в родительский класс?
  • 0Получить рейтинг на MySQL производить неправильные ранги
  • 0Непоследовательное поведение jQuery each () с необъяснимым исправлением
  • 0страница переходит наверх при нажатии меню
  • 1Панды слияния и суммирования данных
  • 0Проблемы понимания ассоциаций в Sequelize для энергичной загрузки
  • 0Функция возвращает неправильный номер?
  • 0Правила ключевых кадров не работают в Firefox
  • 1Лучший способ экспортировать экспресс-методы маршрутов для цепочек обещаний?
  • 1Как настроить палитру цветов?
  • 0Переменная переопределяется в цикле
  • 1Клиент зависает при чтении объекта из сокета
  • 0Ошибка MySQL 1215: невозможно добавить ограничение внешнего ключа для типа данных геометрии POINT
  • 0Обновление разделов страницы после замены фильтра
  • 1openCv onCameraFrame пытается вызвать TextView.setText ()
  • 0angular $ resource получает дополнительную информацию
  • 1Как удалить дубликаты (различные значения) без первичного ключа
  • 0Причудливая шкатулка с URL
  • 1Как перебрать хэш-карту, чтобы получить каждую четвертую пару ключ-значение?
  • 0Горизонтальная страница контента Windows 8
  • 0как получить необходимый контент, используя функцию strip_tags в php
  • 0Ошибка синтаксиса TSQL: отсутствует ‘if’
  • 0Замена содержимого ячейки Jquery
  • 0Меню CSS: перенос слов в подменю
  • 0Как изменить строки и столбцы таблицы на основе значения параметра выбора идентификатора?
  • 0Как предотвратить открытие редактора сетки кендо, всплывающих в JavaScript

Сообщество Overcoder

Понравилась статья? Поделить с друзьями:
  • Как найти мой брокерский счет
  • Равнобедренный треугольник как найти основание 7 класс
  • Майнкрафт как найти деревню с сидом
  • Как составить договор купли продажи земельного участка самостоятельно по доверенности
  • Как найти провод в стене телефоном