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

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

  • автор:

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

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

1 2 3
with open("1.log", "r") as file: lines=file.readlines() print(lines[-1])

Лучшие ответы ( 1 )

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

Ответы с готовыми решениями:

Как получить последнюю строку из файла
Добрый день. Есть log-файл log.cgi.txt Из него необходимо получить последнюю строку, но ошибка.

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

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

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

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

Способы чтения открытого файла в Python

Существует несколько методов, которые могут быть вызваны для чтения открытого файла:

fp.read(size=-1) :
Метод считывает из файла не более size символов в текстовом режиме или size байтов в бинарном режиме и возвращает результат в виде строки в текстовом режиме или байтового объекта в двоичном режиме. Размер size является необязательным числовым аргументом. Если size опущен или равен None или -1 , все содержимое файла будет прочитано и возвращено. Если файл в два раза больше оперативной памяти вашей машины, то это уже ваша проблема. В противном случае считываются и возвращаются Если достигнут конец файла, fp.read() вернет пустую строку ( » ).

>>> with open('text.txt', 'r') as fp: . # Чтение и печать всего файла . print(fp.read()) 

fp.readline(size=-1) :
Метод читает не более size символов в строке за раз. Считывание продолжается до конца строки. Если аргумент опущен или равен None или -1 , то читается вся строка (или остальная часть строки). Символ новой строки ‘\n’ остается в конце возвращаемой строки и опускается только в последней строке файла.

>>> with open('text.txt', 'r') as fp: . # читаем и печатаем первые 5 символов строки . print(fp.readline(5)) 

fp.readlines() :
Метод читает файл целиком и возвращает их в виде списка.

>>> with open('text.txt', 'r') as fp: . # Возвращает объект списка . text_list = fp.readlines() . >>> text_list # ['Строка №1', 'Строка №2', 'Строка №3', 'Строка №4', 'Строка №5'] 

Приведенный выше пример также можно выполнить с помощью функции list() для создания списка из файлового объекта:

>>> with open('text.txt', 'r') as fp: . # Возвращает объект списка . text_list = list(fp) . >>> text_list # ['Строка №1', 'Строка №2', 'Строка №3', 'Строка №4', 'Строка №5'] 

Обычно, что нужно делать при чтении файла, это читать из него по одной строке и каким-то образом ее обрабатывать. Вот пример того, как использовать метод fp.readline() для выполнения чтения файла построчно:

>>> with open('text.txt', 'r') as fp: . # Считывание и печать всего файла строка за строкой . line = fp.readline() . while line != '': . print(line, end='') . line = fp.readline() 

Другой способ, которым можно перебирать каждую строку в файле, это использовать метод file.readlines() файлового объекта. Помните, что этот метод возвращает список, где каждый элемент в списке представляет строку в файле:

>>> with open('text.txt', 'r') as fp: . for line in fp.readlines(): . print(line, end='') 

Приведенные выше примеры могут быть упрощены путем перебора самого объекта file. Этот подход более быстрый и эффективный. Рекомендуется использовать именно его для чтения файлов:

>>> with open('text.txt', 'r') as fp: . # Считывание и печать всего файла строка за строкой . for line in fp: . print(line, end='') 

Примечание:
примеры содержат запись print(line, end=») . end= » предотвращает добавление дополнительной новой строки в печатаемый текст. Дополнительно смотрите описание функции print() .

  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Составление пути к файлу в Unix и Windows
  • Открытие/закрытие файла для чтения/записи
  • Типы обрабатываемых данных и файлов
  • Способы чтения открытого файла
  • Способы записи в открытый файл
  • Одновременное чтение из одного и запись в другой файл
  • Добавление данных в открытый файл
  • Управление указателем чтения/записи в файле
  • Создание менеджера для обработки файла
  • Сохранение словарей в формат JSON
  • Встроенные модули для работы с разными форматами

Re: python, чтение из файла

спасиб, в моем случае это подойдет, но как я понимаю readlines читает весь файл в память, не скопытиться ли питон на файлике мегов так в 300, в условиях небольшого объема оперативки?

CFA ★
( 25.03.08 19:02:23 MSK ) автор топика
Ответ на: Re: python, чтение из файла от CFA 25.03.08 19:02:23 MSK

Re: python, чтение из файла

По-моему, первый вариант более правильный — readlines не рекомендуется использовать, ему на смену пришёл xreadlines.

Laz ★★★★★
( 25.03.08 19:14:17 MSK )
Ответ на: Re: python, чтение из файла от CFA 25.03.08 19:02:23 MSK

Re: python, чтение из файла

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

anonymous
( 25.03.08 19:16:34 MSK )
Ответ на: Re: python, чтение из файла от CFA 25.03.08 19:02:23 MSK

Re: python, чтение из файла

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

Python. Текстовые файлы. Примеры обработки (модификации) текстовых файлов в соответствии с условием

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

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

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

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

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

Пример.

# Вычислить количество строк в файле # 1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 2. Цикл чтения строк файла count = 0 # количество строк в файле s = f.readline() while s != '': # цикл чтения строк до пустой строки s = f.readline() count = count+1 print('count = ', count) # вывести результат # 3. Закрыть файл f.close()
2. Как прочитать строки из текстового файла, если их количество неизвестно? Способы определения количества строк в файле

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

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

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

# Определение количества строк в файле # Способ 1. Метод readline(). # 1.1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 1.2. Цикл чтения строк файла count = 0 # количество строк в файле s = f.readline() while s != '': # цикл чтения строк до пустой строки s = f.readline() count = count+1 print('count = ', count) # вывести результат # 1.3. Закрыть файл f.close() # ---------------------------------- # Способ 2. Метод readlines() # 2.1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 2.2. Прочитать строки файла в список L L = f.readlines() # 2.3. Количество элементов списка == количество строк в файле count = len(L) print('count = ', count) # 2.4. Закрыть файл f.close() # ------------------------------------- # Способ 3. Использование итератора файла # 3.1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 3.2. Использовать файловый итератор count = 0 for line in f: count = count+1 # 3.3. Вывести результат print('count = ', count) # 3.4. Закрыть файл f.close()
3. Замена строки в текстовом файле. Пример

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

  • считать файл в список;
  • изменить строку в списке;
  • записать список в файл.
# Замена строки в текстовом файле # 1. Исходная строка s = "Hello world!" # 2. Указанная позиция (нумеруеться с 0) pos = 3 # 3. Открыть файл для чтения f = open('TextFile1.txt', 'r') # 4. Считать все строки из файла в список L L = f.readlines() # 5. Заменить строку в списке в позиции pos if (pos >= 0) and (pos < len(L)): # в последней строке '\n' не добавлять if (pos==len(L)-1): L[pos] = s else: L[pos] = s + '\n' # 6. Закрыть файл f.close() # ------------------------------------ # Записать измененный список в файл # 7. Открыть файл для записи f = open('TextFile1.txt', 'w') # 8. Записать список for line in L: f.write(line) # 9. Закрыть файл f.close()
4. Удаление строки из файла по ее индексу. Пример

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

# Удаление строки из файла по индексу # 1. Ввести позицию удаления (нумеруется с 0) pos = int(input('pos = ')) # 2. Открыть файл для чтения f = open('TextFile1.txt', 'r') # 3. Считать все строки из файла в список L L = f.readlines() # 4. Удалить строку из списка # Проверка, корректна ли позиция pos if (pos >= 0) and (pos < len(L)): i = pos while ilen(L)-1: L[i] = L[i+1] i = i+1 L = L[:-1] # убрать последний элемент в списке # 5. Закрыть файл f.close() # ------------------------------------ # Записать измененный список в файл # 6. Открыть файл для записи f = open('TextFile1.txt', 'w') # 7. Записать список for line in L: f.write(line) # 8. Закрыть файл f.close()
5. Вставка строки в указанную позицию файла. Пример

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

# Вставка строки в заданную позицию файла # 1. Ввести строку s = str(input('s = ')) # 2. Ввести позицию вставки (нумеруется с 0). # Если позиция равна количеству строк в файле, # то происходит дописывание строки в конец файла. pos = int(input('pos = ')) # 3. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 4. Считать все строки из файла в список L L = f.readlines() # 5. Проверка, корректно ли значение pos if (pos<0) or (pos>len(L)): f.close() exit() # 6. Проверка, есть ли pos строкой, которая # следует за последней строкой if pos==len(L): # нужно добавить строку в конец списка L L[len(L)-1] += '\n' L2 = L + [s] # добавить в конец списка L строку s else: # Создать новый список L2, который будет содержать # список L с новой строкой s, вставленной в позиции pos. L2 = [] # Скопировать элементы из L в L2 до позиции вставки L2 = L2 + L[:pos] # использовать срез (. ) # В список L2 вставить элемент s + новая строка L2 = L2 + [s + '\n'] # Скопировать из L в L2 элементы, которые лежат после pos L2 = L2 + L[pos:] # опять использовать срез # 7. Закрыть файл f.close() # ------------------------------------ # Записать новосозданный список L2 в файл # 8. Открыть файл для записи f = open('TextFile1.txt', 'w') # 9. Записать список L2 for line in L2: f.write(line) # 10. Закрыть файл f.close()
6. Обмен местами двух строк в файле. Пример

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

# Обмен местам двух строк в файле # 1. Ввести позицию строки 1 (нумеруется с 0) pos1 = int(input('pos1 = ')) # 2. Ввести позицию строки 2 (нумеруется с 0), pos2>pos1 pos2 = int(input('pos2 = ')) # 3. Проверка условия: pos2>pos1 if pos2exit() # 4. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 5. Считать все строки из файла в список L L = f.readlines() # 6. Корректировка последней строки - добавить '\n', если нужно s = L[len(L)-1] # взять последнюю строку length = len(s) # взять длину последней строки f_nl = True # флажок, указывающий, был ли символ '\n' в конце файла if (length>0)and((s[length-1] != '\n')): L[len(L)-1] += '\n' # добавить в последнюю строку '\n' f_nl = False # 7. Закрыть файл f.close() # 8. Проверка, корректно ли заданы позиции pos1 та pos2 if (pos1<0)or(pos1>=len(L))or(pos2<0)or(pos2>=len(L)): exit() # 9. Обмен строк местами s = L[pos1] L[pos1] = L[pos2] L[pos2] = s # ------------------------------------ # Записать новосозданный список L в файл # 10. Открыть файл для записи f = open('TextFile1.txt', 'w') # 11. Если в конце файла не было '\n' if f_nl == False: # то убрать из последней строки '\n' L[len(L)-1] = L[len(L)-1][:-1] # 12. Цикл записи каждой строки списка в файл for item in L: f.write(item) # 13. Закрыть файл f.close()
7. Реверсирование строк файла (перестановка строк файла в обратном порядке). Пример
# Перестановка строк файла в обратном порядке # 1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 2. Считать все строки из файла в список L L = f.readlines() # 3. Корректировка последней строки - добавить '\n', если нужно s = L[len(L)-1] # взять последнюю строку length = len(s) # взять длину последней строки f_nl = True # флажок, указывающий, был ли символ '\n' в конце файла if (length>0)and((s[length-1] != '\n')): L[len(L)-1] += '\n' # добавить в последнюю строку '\n' f_nl = False # 4. Закрыть файл f.close() # 5. Создать новый список L2 - реверсный к списку L L2=[] i=0 while ilen(L): s = L[len(L)-i-1] # взять строку с конца списка L L2 = L2 + [s] i = i+1 # 6. Если в конце файла не было '\n' if f_nl == False: # то убрать из последней строки '\n' L2[len(L)-1] = L2[len(L)-1][:-1] # ------------------------------------ # Записать новосозданный список L2 в файл # 7. Открыть файл для записи f = open('TextFile1.txt', 'w') # 8. Цикл записи каждой строки списка в файл for item in L2: f.write(item) # 9. Закрыть файл f.close()
8. Сортировка строк файла. Метод сортировки выбором. Пример

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

# Сортировка строк файла. Метод сортировки выбором # 1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 2. Считать все строки из файла в список L L = f.readlines() # 3. Корректировка последней строки - добавить '\n', если нужно s = L[len(L)-1] # взять последнюю строку length = len(s) # взять длину последней строки f_nl = True # флажок, указывающий, был ли символ '\n' в конце файла if (length>0)and((s[length-1] != '\n')): L[len(L)-1] += '\n' # добавить в последнюю строку '\n' f_nl = False # 4. Закрыть файл f.close() # 5. Сортировка выбором списка L i=0 while ilen(L): k = i # поиск наименьшего элемента x = L[i] j=i+1 while jlen(L): if L[j] # Поменять местами наименьший элемент из L[i] L[k] = L[i] L[i] = x i=i+1 # 6. Учесть, был ли в конце символ '\n' if f_nl == False: # то убрать из последней строки '\n' L[len(L)-1] = L[len(L)-1][:-1] # ------------------------------------ # Записать новосозданный список L в файл # 7. Открыть файл для записи f = open('TextFile1.txt', 'w') # 8. Цикл записи каждой строки списка в файл for item in L: f.write(item) # 9. Закрыть файл f.close()
9. Объединение двух файлов. Пример
# ----------------------- # Объединение файлов myfile1.bin+myfile2.bin => myfile3.bin # 1. Открыть файлы для чтения f1 = open('myfile1.bin', 'rb') f2 = open('myfile2.bin', 'rb') # 2. Считать файлы в списки L1, L2 L1 = f1.readlines() L2 = f2.readlines() # 3. Объединить списки L3 = L1 + L2 # 4. Закрыть файлы myfile1.bin, myfile2.bin f1.close() f2.close() # 5. Открыть файл myfile3.bin для записи f3 = open('myfile3.bin', 'wb') # 6. Записать строки в файл f3.writelines(L3) # 7. Закрыть результирующий файл f3.close()

Связанные темы

  • Файлы. Общие понятия. Открытие/закрытие файла. Функции open() , close()
  • Примеры работы с текстовыми файлами
  • Примеры работы с бинарными файлами
  • Модуль struct . Работа с бинарными файлами. Примеры сохранения/чтения упакованных двоичных данных
  • Модуль pickle . Сериализация объектов. Примеры использования для записи/чтения информации из бинарных файлов

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

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