I want to know the number of row of a text file.
How can I do this?
asked Jul 7, 2011 at 0:58
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
47.4k20 gold badges85 silver badges107 bronze badges
answered Jul 7, 2011 at 1:01
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
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
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
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
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. 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
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! Только составим предварительно ТЗ.
Кстати, а что, если в файле несколько строк с искомой фразой, и нам нужно вывести номера всех этих строк? Этот вариант мы не оставим без внимания и обязательно рассмотрим в этой статье в задаче №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