Перейти к содержимому

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

  • автор:

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

Как прочитать файл построчно в Python

Существует много способов чтение из файла построчно в Python. Вы можете считать строки в список или обращаться к каждой из строк в цикле при помощи итератора или вызова функции объекта file.

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

Пример 1: Чтение файла построчно функцией readline()

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

Как использовать функцию file.readline()

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

  1. Открываем файл в режиме чтения. При этом возвращается дескриптор файла.
  2. Создаём бесконечный цикл while.
    1. В каждой итерации считываем строку файла при помощи readline() .
    2. Если строка не пустая, то выводим её и переходим к следующей. Вы можете проверить это, используя конструкцию if not . В противном случае файл больше не имеет строк и мы останавливаем цикл с помощью break .
     
     
    # получим объект файла file1 = open("sample.txt", "r") while True: # считываем строку line = file1.readline() # прерываем цикл, если строка пустая if not line: break # выводим строку print(line.strip()) # закрываем файл file1.close
    Привет! Добро пожаловать на PythonRu. Удачи в обучении!

    Пример 2: Чтение строк как список функцией readlines()

    Функция readlines() возвращает все строки файла в виде списка. Мы можем пройтись по списку и получить доступ к каждой строке.

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

     
    # получим объект файла file1 = open("sample.txt", "r") # считываем все строки lines = file1.readlines() # итерация по строкам for line in lines: print(line.strip()) # закрываем файл file1.close
    Привет! Добро пожаловать на PythonRu. Удачи в обучении!

    Пример 3: Считываем файл построчно из объекта File

    В нашем первом примере, мы считываем каждую строку файла при помощи бесконечного цикла while и функции readline() . Но Вы можете использовать цикл for для файлового объекта, чтобы в каждой итерации цикла получать строку, пока не будет достигнут конец файла.

    Ниже приводится программа, демонстрирующая применение оператора for-in, для того, чтобы перебрать строки файла.

    Для демонстрации откроем файл с помощью with open. Это применимо и к предыдущим двум примерам.

    Как вывести последнюю строку из файла?

    У меня есть файл "тест.txt" в нем есть 10 строк
    Как сделать вывод последней строки?

    • Вопрос задан более трёх лет назад
    • 6935 просмотров

    Комментировать

    Решения вопроса 1

    f_read = open("тест.txt", "r") last_line = f_read.readlines()[-1] print(last_line)

    Ответ написан более трёх лет назад

    Нравится 4 4 комментария

    TheMergus @TheMergus Автор вопроса

    Как удалить эту строку после вывода?

    deepblack

    deepblack @deepblack Куратор тега Python

    TheMergus, вы отметьте решением ответ. Потом задавайте новый вопрос.

    TheMergus @TheMergus Автор вопроса

    TheMergus, Имелось ввиду задать новый вопрос не в комментариях, а принципиально новый вопрос создать. Ну да ладно.
    Удалить последнюю строчку можно, например, так:

    f = open("тест.txt", "r+") lines = f.readlines() lines = lines[:-1] f.seek(0) f.truncate() f.write("".join(lines))

    Ответы на вопрос 0

    Ваш ответ на вопрос

    Войдите, чтобы написать ответ

    python

    • Python
    • +2 ещё

    Дали задание на стажировку, не могу понять сами данные, какие данные пихать в метрики?

    • 1 подписчик
    • час назад
    • 66 просмотров

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

    Имеются большие файлы от 5мб и выше, к примеру 1 файл содержит 114320 строк. Необходимо считать последнюю или предпоследнюю строку (если в последней был символ новой строки), и дописать новые данные. Видел разные реализации, но все они предполагают, что файл будет маленький.

    Отслеживать
    48.6k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
    задан 28 авг 2017 в 3:06
    961 1 1 золотой знак 10 10 серебряных знаков 28 28 бронзовых знаков
    Связанный вопрос Get last n lines of a file with Python, similar to tail
    28 авг 2017 в 3:45

    5MB или 100K строк это относительно маленькие данные: начните с самого простого кода, который работает в вашем случае.

    28 авг 2017 в 4:04

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

    28 авг 2017 в 4:06
    Попробуйте на ссылку нажать
    28 авг 2017 в 4:09

    1 ответ 1

    Сортировка: Сброс на вариант по умолчанию

    Чтобы прочитать последнюю строку в относительно небольшом файле:

    from collections import deque with open('файл.txt') as file: [last_line] = deque(file, maxlen=1) or [''] 

    Большой файл можно с конца читать пока новая строка не встретится, используя mmap :

    from mmap import mmap, ACCESS_READ def last_line(filename, newline=b'\n'): with open(filename, 'rb', 0) as file: try: s = mmap(file.fileno(), 0, access=ACCESS_READ) except ValueError: # empty return b'' else: with s: i = s.rfind(newline, 0, -1) return s[i + len(newline) if i != -1 else 0:] 

    Этот вариант возвращает байты и не поддерживает режим универсальных строк. Пример:

    >>> last_line('no newline.txt') b'abc' 

    Для чтения пары строк с конца, ещё может подойти, к примеру, tail(file, n) функция из @A. Coady ответа. Размер буфера в ответе удваивается по схожей причине, описанной в Непонятное замедление конкатенации в цикле — при чтении с конца нужно быть осторожным, чтобы не сделать ваш алгоритм квадратичным случайно:

    def last_line(filename, newline=b'\n'): with open(filename, 'rb') as file: size, s = 2, b'' while s.find(newline, 0, -1) == -1: # until a full line is read try: file.seek(-size, os.SEEK_END) except IOError: # file is too small file.seek(0) # rewind to beginning break finally: s = file.read(size) size *= 2 i = s.rfind(newline, 0, -1) return s[i + len(newline) if i != -1 else 0:] 

    Сравните производительность (включая deque() вариант), чтобы узнать какое решение лучше работает в вашем случае.

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

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