Вывести номер строки python

Python: Как узнать номер строки текстового файла

@Ben: Как @SpliFF прокомментировал ответ @ horhay.romero, ваш вопрос неясен. Вы хотите общее количество строк в файле или номер данной строки.

4 ответа

если итерирование по файлу:

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

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

count = sum( 1 for line in f ) 

enumerate () начнет считать с 0, что может быть не тем, что вы хотите. Кроме того, файл — это имя функции (эквивалентно open ()), поэтому лучше не использовать его в качестве имени переменной.

Исправлено. Я полагаю, что в Python 2.6 и более поздних версиях вы можете указать номер, с которого можно начать.

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

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

хотя sum( 1 for line in f ) будет использовать меньше памяти, поскольку не будет загружать весь файл в память.

Пример кода просто дает общее количество строк в файле. Я думаю, что вопрос заключается в том, чтобы получить номер любой данной строки.

@GreenMatt: вопрос неоднозначный. в любом случае, вы неправильно интерпретируете грамматику. она должна быть либо «количество строк» или «количество подряд».

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

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

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

Использование функции «file» не рекомендуется: «» «При открытии файла предпочтительно использовать open () вместо прямого вызова этого конструктора» «»

Источник

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

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)
Результат работы скрипта: 8

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

Описанная выше функция 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 и вывел их в виде списка на экран:

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

А теперь, тренировки ради, предлагаю оформить написанный выше полезный код в красивую функцию под названием 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 найти номер строки (или отыскать все строки) с заданным вхождением.

Источник

Читайте также:  Html tag wrapper vs code
Оцените статью