Как считать последнюю строку в файле питон

Обновлено: 04.07.2024

Текстовые файлы. Примеры решения задач на модификацию текстовых файлов

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

Содержание

  • 1. Как определить, что данные в текстовом файле закончились?
  • 2. Как прочитать строки из текстового файла, если их количество неизвестно? Способы определения количества строк в файле
  • 3. Замена строки в текстовом файле. Пример
  • 4. Удаление строки из файла по ее индексу. Пример
  • 5. Вставка строки в указанную позицию файла. Пример
  • 6. Обмен местами двух строк в файле. Пример
  • 7. Реверсирование строк файла (перестановка строк файла в обратном порядке). Пример
  • 8. Сортировка строк файла. Метод сортировки выбором. Пример
  • 9. Объединение двух файлов. Пример

Поиск на других ресурсах:

1. Как определить, что данные в текстовом файле закончились?

Пример.

2. Как прочитать строки из текстового файла, если их количество неизвестно? Способы определения количества строк в файле

Для чтения всех строк файла можно выделить два основных способа:

  • прочитать строки файла методом readlines() . Результатом будет список. Затем с помощью метода len() определить количество строк;
  • реализовать цикл чтения строк методом readline() до тех пор, пока не будет пустая строка. Метод readline() возвращает пустую строку в случае, когда достигнут конец файла.

Пример. В примере приводятся 3 способа определения количества строк в файле.

3. Замена строки в текстовом файле. Пример

Чтобы заменить строку в текстовом файле нужно выполнить следующие действия:

  • считать файл в список;
  • изменить строку в списке;
  • записать список в файл.
4. Удаление строки из файла по ее индексу. Пример

По примеру п. 3 выполняется удаление строки по ее индексу.

5. Вставка строки в указанную позицию файла. Пример

В данном примере осуществляется вставка строки в указанную позицию файла. Если указать позицию, которая размещена за последней строкой файла, то осуществляется дописывание строки в конец файла.

6. Обмен местами двух строк в файле. Пример
7. Реверсирование строк файла (перестановка строк файла в обратном порядке). Пример
8. Сортировка строк файла. Метод сортировки выбором. Пример

Приводится пример сортировки строк файла. Используется метод сортировки выбором.

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

Поэтому мне нужен метод tail() , который может читать строки n снизу и поддерживает смещение. То, что я придумал, выглядит так:

Это разумный подход? Каков рекомендуемый способ привязки файлов журнала со смещением?

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

Если ваш текстовый файл выглядит так: мышь змея кот ящерица волк собака

Вы можете перевернуть этот файл, просто используя индексирование массива в python '' '

Результат: собака волк ящерица кот

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

Для файла значительного размера наилучшим способом является mmap . сделать это. Чтобы улучшить существующий ответ mmap , эта версия переносима между Windows и Linux и должна работать быстрее (хотя она не будет работать без некоторых модификаций 32-битного Python с файлами в диапазоне ГБ, см. другой ответ для подсказок по обработке этого и для модификации для работы на Python 2 ).

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

Наконец, это чтение в двоичном режиме (необходимо использовать mmap ), поэтому оно дает str строк (Py2) и bytes строк (Py3); если вы хотите unicode (Py2) или str (Py3), итеративный подход можно настроить так, чтобы он декодировался для вас и / или исправлял символы новой строки:

Примечание: я напечатал все это на машине, где у меня нет доступа к Python для тестирования. Пожалуйста, дайте мне знать, если я что-то опечатал; это было достаточно похоже на мой другой ответ, что я думаю , что это должно работать, но с некоторыми изменениями (например, обработка >) может привести к тонким ошибкам. Пожалуйста, дайте мне знать в комментариях, если есть какие-либо ошибки.

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

вот ответ, подобный MizardX, но без его очевидной проблемы принятия квадратичного времени в худшем случае от повторного сканирования рабочей строки для новых строк по мере добавления кусков.

по сравнению с решением activestate (которое также кажется квадратичным), это не взрывает пустой файл и делает один поиск на блок вместо двух.

по сравнению с нерестовым "хвостом" это автономно. (Но "хвост" лучше всего, если у вас есть он.)

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

использовать его по запросу:

Edit: изменена карта () на itertools.imap () в head (). Edit 2: упрощенный reversed_blocks(). Edit 3: избежать повторных проверок хвост строки. Edit 4: переписать reversed_lines () потому что str.splitlines () игнорирует окончательный '\n', как BrianB заметил (спасибо).

обратите внимание, что в очень старых версиях Python конкатенация строк в цикле здесь займет квадратичное время. CPython, по крайней мере, за последние несколько лет, автоматически избегает этой проблемы.

Если вы используете Python в системе POSIX, вы можете использовать' tail -10 ' для извлечения последних нескольких строк. Это может быть быстрее, чем писать собственный код Python, чтобы получить последние 10 строк. Вместо того, чтобы открывать файл напрямую, откройте канал из команды 'tail -10 filename'. Если вы уверены в выходе журнала, хотя (например, вы знаете, что есть никогда любые очень длинные строки, которые имеют сотни или тысячи символов), а затем с помощью одного из "читать последние 2KB" перечисленные подходы были бы прекрасны.

Я думаю, что чтение последних 2 кб или около того файла должно убедиться, что вы получите 10 строк, и не должно быть слишком много ресурсов.

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

Если вы находитесь на коробке unix, os.popen("tail -10 " + filepath).readlines() вероятно, будет самый быстрый способ. В противном случае, это зависит от того, насколько надежным вы хотите, чтобы он был. Все предложенные до сих пор методы так или иначе потерпят неудачу. Для надежности и скорости в наиболее распространенном случае вам, вероятно, нужно что-то вроде логарифмического поиска: используйте файл.найдите конец файла минус 1000 символов, прочитайте его, проверьте, сколько строк он содержит, затем в EOF минус 3000 символов, прочитайте 2000 символов, подсчитайте строки, затем EOF минус 7000, прочитайте в 4000 характерах, подсчитайте линии, etc. пока у вас не будет столько строк, сколько вам нужно. Но если вы точно знаете, что он всегда будет запускаться в файлах с разумной длиной строки, вам это может не понадобиться.

вы также можете найти вдохновение в исходный код для unix

он работает очень хорошо и намного эффективнее, чем что-либо вроде fileObj.readlines () [-10:], что заставляет python читать весь файл в память, а затем отсекает последние десять строк.

вы можете читать куски 1000 байт или около того из конца файла в буфер, пока у вас не будет 10 строк.

вы также можете подсчитать строки при обратном прохождении файла, вместо того, чтобы угадывать смещение байта.

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

Я принял предложение mhawke использовать mmap и написал версию, которая использует rfind :

прочитайте последние несколько Ks файла и разделите его на строки, чтобы вернуть только последние 10.

маловероятно, что начало этого куска упадет на границу линии, но вы все равно отбросите первые строки.

лично у меня было бы искушение вырваться в оболочку и вызвать tail-n10 для загрузки файла. Но тогда я на самом деле не программист Python;)

во-первых, функция, которая возвращает список:

во-вторых, функция, которая перебирает строки в обратном порядке:

Edit: теперь получает размер файла автоматически
Edit2: теперь повторяется только для 10 строк.

это решение будет читать файл только один раз, но с помощью 2 указателей на объект файла, чтобы получить последние N строк файла без повторного чтения:


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

Получить последнюю строку из текста
нужно получить последнюю строку из предложенного текста..Например: вася ходил гулять петя упал.


Как получить последнюю строку в таблице?
Есть таблица: 09.12.1212 14.12.1212 03.12.1212 Как просто получить последнюю строку в этой.

Получить последнюю строку (или Id) в таблице?
Пожалуйста подскажите как с помощью Entity получить последнюю строку таблицы или точнее Id, чтобы.

Это фраза сказанная самому себе? Просто она ни о чем.

lines[-1] это последняя строка. Хотя, может быть ты не понимаешь, что такое строка? Пустая строка это тоже строка.

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

Решение

Кодировку файла нужно всегда указывать в параметре encoding="кодировка" функции open.
По умолчанию используется кодировка локали компьютера.


Получить первую и последнюю строку из таблицы
Таблица имеет вид CREATE TABLE public.rost ( channel integer NOT NULL, value real.


Как получить последнюю строку из textbox?
Нужно как то вытащить самую последнюю строку из textbox. Как это сделать?


Как получить последнюю строку консоли?
Как получить последнюю строку консоли?


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

Как получить последнюю строку (не используя подзапрос)?
Столкнулся с такой задачей, необходимо из таблицы вытаскивать последнюю строку, или последнюю.


Удалите из файла последнюю строку
Дан текстовой файл, созднанный заранее в редакторе Блокнот. Удалите из него последнюю строку.

Высокоуровневый язык программирования 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 через переменную, которая ссылается на документ.

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

Читайте также: