Как найти номер строки в файле python
Перейти к содержимому

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

Python-сообщество

вот тут люди задаются тем же вопросом
https://stackoverflow.com/questions/845058/how-to-get-line-count-cheaply-in-python
я там насчитал с десяток способов берешь пару тройку файлов разного размера, от пары килобайт до сотни МБ и проганяешь все способы измеряя время таймит-ом.

Отредактировано PEHDOM (Ноя. 10, 2017 14:26:18)

#4 Ноя. 11, 2017 07:51:17

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

Если нужна скорость — юзай многопотоковое программирование — юзай threading. По крайней мере производительность и скорость моей программы(не скажу какой) увеличилась в x2.5 раз при том, что прога работала в 2-ух потоках, а не в 1-ом(мэйновском потоке).

#5 Ноя. 11, 2017 22:46:25

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

Спасибо большое всем

#6 Ноя. 11, 2017 22:55:20

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

damilkrose
ну и как вам блин ваш совет поможет автору? КАК ?

_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

#7 Ноя. 12, 2017 17:37:25

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

Под советом “используй threading” я имел в виду, bjiq, что ты можешь сделать свою прогу работающей в нескольких потоках. Подробнее: https://habrahabr.ru/post/149420/
Надо просто содержимое файла по возможности разделить на 2 части для 2-ух потоков.

А твой вариант совсем не плох.

Отредактировано damilkrose (Ноя. 12, 2017 17:38:00)

#8 Ноя. 12, 2017 17:45:36

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

damilkrose
Объясни на пальцах. Вот есть у нас файл, надо узнать количество строк. Вопрос № 1: как не зная размер файла разбить его на две части? Вопрос № 2: что конкретно должен делать поток № 1 с частью файла № 1.

Онлайн

#9 Ноя. 12, 2017 19:17:28

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

А по частям для каждого потока. Так дело пойдет гораздо быстрее. И размер тут не имеет особого значения если в деле говориться о строках

P. S. Написал что думаю. Если не прав в чем-то — пожалуйста докажи, и я извинюсь.

Работа с текстовыми файлами

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

Создание, открытие и закрытие файла

Работа с любым текстовым файлом в Python начинается с вызова специальной функции open, которая принимает в качестве параметров путь к объекту на компьютере и режим обработки. Путь к документу можно указать как абсолютный (адрес расположения на жестком диске ПК), так и как относительный (координаты относительно папки проекта). Выбирая нужный режим обработки файла, следует учитывать его назначение (“w” для записи, “r” для чтения данных). Следующий пример показывает простое взаимодействие с текстовым документом.

Как можно заметить, функция open принимает относительный путь файла и открывает его для записи. Если в папке с исходным кодом документа с аналогичным именем и расширением .txt не существует, метод open создает его самостоятельно, после чего открывает для него нужный режим обработки. Выполнив все необходимые действия с переменной file, которая ссылается на реальный файл, следует вручную закрыть его, чтобы избежать потери информации. Данную задачу выполняет метод close, если вызвать его при помощи оператора доступа (точки).

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

Оба примера небольших программ демонстрируют работу с test.txt, который генерируется в каталоге с исходным кодом. В качестве режима обработки для него выбирается запись данных. После этого при помощи метода write в него заносится строка “hello world”. Завершается код в обоих случаях закрытием текстового файла test.txt методом close или автоматически.

Запись построчно

Чтобы быстро записать информацию в текстовый файл, достаточно открыть его в программе, написанной на языке Python, после чего воспользоваться функцией write через переменную, которая ссылается на документ.

В Python запись в файл построчно осуществляется с помощью записи нужной строки с последующей записью символа перевода строки ‘\n’. Рассмотрим пример записи списка поэлементно. Каждый элемент будет записан в новой строке:

Приведенный выше пример небольшой программы показывает создание небольшого массива lines, который содержит три строковых элемента: “first”, “second” и “third”. За счет функции open и связки операторов with as происходит открытие текстового файла test.txt в корневом каталоге жесткого диска D. В цикле мы проходим по всем элементам списка и с помощью команды write их записываем. Чтобы каждая запись была с новой строки, добавляем символ перевода строки.

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

Этот пример отличается от предыдущего тем, что вызывается метод writelines, который принимает в качестве аргумента генератор. Для разделения элементов последовательности тут применяется “\n”, благодаря чему каждое слово в документе будет находиться в отдельной строке.

Чтение построчно

Прочитать содержимое текстового файла построчно в языке Python очень просто, поскольку в этом прекрасно помогает цикл for. Но для начала все же необходимо открыть документ, как и в предыдущем случае, при помощи open и with as. Однако на этот раз следует указать другой режим обработки файла, выбрав для него “r” для получения доступа к чтению данных.

В этом примере показывается открытие файла test.txt, в котором уже содержится небольшой массив строк, записанный ранее. Построчное чтение информации из файла производится в цикле for. Каждая итерация выводит сведения из новой строки (line) при помощи функции print. Все элементы отображаются на экране построчно, как и были ранее помещены в test.txt.

Количество строк

Возможности языка Python позволяют производить и куда более сложные виды программных операций с внутренним содержимым текстовых файлов. Например, если требуется определить в Python количество строк в файле, можно открыть файл и в цикле посчитать количество занятых в нем строк. В этом поможет предварительно объявленная переменная count, в которую перед применением нужно записать 0, а затем прибавлять по единице с каждой новой строкой.

Приведенный выше пример демонстрирует работу счетчика count. Для взаимодействия с ним следует открыть текстовый файл в режиме чтения, а затем инкрементировать в каждом новом шаге цикла for объявленную ранее числовую переменную, которая затем выводится в print.

Можно поступить и другим способом. Прочитать файл в список с помощью readlines. А после этого с помощью функции len определить размер списка. Это и будет количество строк.

Поиск строки

Чтобы с помощью Python найти строку в текстовом файле, стоит прибегнуть к помощи встроенного метода readlines, который позволяет автоматически считывать внутреннее содержимое файла. Как и раньше, для начала необходимо открыть test.txt для чтения, чтобы затем поместить данные из него в специальный массив lines. Встроенный метод index позволяет найти номер элемента в последовательности, просто передав ему нужный объект, например, строку “second”.

Поскольку в test.txt все элементы располагаются в отдельных строках, к строке, которую стоит передать методу index в качестве аргумента, необходимо прибавить конструкцию “\n”.

Удаление строки

Чтобы в Python удалить ненужную строку из файла, следует воспользоваться сразу двумя режимами обработки файлов: чтение и запись. Для начала необходимо открыть test.txt для чтения, чтобы поместить информацию из него в отдельный массив lines. Далее потребуется удалить один из элементов последовательности при помощи оператора del, указав ему индекс нужной строки в квадратных скобках. Массив объектов, который получился в итоге, необходимо поместить в исходный текстовый файл, однако на этот раз открыть его надо в режиме записи.

Приведенный выше пример небольшой программы демонстрирует удаление строки из файла. В данном случае используются методы readlines и writelines, позволяющие считывать массив строк из документа и записывать его туда же, разделяя отдельные элементы списка.

Таким образом, можно достаточно легко взаимодействовать с содержимым текстовых файлов, пользуясь языком программирования Python 3. Его встроенные функции позволяют записывать данные в документ и считывать их в удобном для пользователя виде. При помощи средств по расширенной работе с файлами, можно управлять ими на куда более продвинутом уровне.

Как я могу найти номер строки определенной строки в текстовом файле в Python?

Я написал скрипт Python, который открывает список CSV-файлов, содержащих данные масс-спектрометрии, собирает данные с помощью Numpy.genfromtxt, выполняет расчеты на основе этих данных с использованием статистических моделей и возвращает результаты в скомпилированном файле Excel. Внутри CSV-файла заголовок и внутренняя структура могут иметь переменный размер в зависимости от условий проведения эксперимента.

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

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

затем данные для каждого изотопа (3 столбца), например:

Я хочу определить номер строки данных и длину данных для каждого изотопа.

Когда я затем пытаюсь импортировать весь файл данных, не игнорируя заголовки (для подсчета индекса строки), я получаю ошибки, связанные с количеством столбцов. Я пытался использовать usecols = 1, чтобы игнорировать остальные, но это не работает. (valueerror)

Я предполагаю, что для этого есть простое решение, но мои навыки программирования пока не очень хороши.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *