Построчное чтение файла Python

Построчное чтение файла в Python 3

Построчное чтение файла в Python 3

Когда используется построчное чтение файла?

Вы стали счастливым обладателем больших текстовых файлов, в которых заключены важные данные? Это здорово! Однако, теперь перед Вами стоит задача извлечения данных из файла по частям, желательно, по строкам. Ведь чтение большого файла и одномоментная загрузка его содержимого в оперативную память чревата жалобами компьютера на усталость и «замутненное сознание», что с 2020 года является непозволительной роскошью для рабочих лошадок. Поэтому предлагаю рассмотреть варианты, с помощью которых можно реализовать построчное чтение файла в Python 3 по следующему сценарию:

  • Открыть файл
  • Считать первую строку
  • Вывести на экран первую строку
  • Считать вторую строку
  • Вывести на экран 2ю строку
  • и так далее..

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

Оптимальный вариант для построчного чтения файла в Python:

1. Подготавливаем файл:

В качестве примера я буду использовать файл с именем «text.txt», состоящий из 5 строк следующего вида:

Файл «text.txt»
Это первая строка
это вторая строка
это третья строка
это четвертая строка
это последняя, пятая строка

2. Создадим переменную для хранения пути к файлу:

path_to_file = «путь_к_файлу»

Замените выражение в коде «путь к файлу» на актуальный путь к вашему файлу. Если у вас возникли сложности с определением пути к файлу, ознакомьтесь с инструкцией «Как задать путь к файлу в Python» и возвращайтесь — будем кодить построчное считывание файла!

3. Представленный ниже код откроет файл и выведет его содержимое на экран:

path_to_file = «путь_к_файлу»

with open(path_to_file) as file:
    for line in file:
        print(line)

На экран выведется все содержимое файла:

Это первая строка
это вторая строка
это третья строка
это четвертая строка
это последняя, пятая строка

Чтобы дополнить вывод номерами строк, добавим в приведенный выше код переменную num_line для хранения номера строки и функцию enumerate(file) для получения номера строки:

path_to_file = «путь_к_файлу»

with open(path_to_file) as file:
    for num_line, line in enumerate(file):
        print(num_line, line)

Теперь вывод выглядит так:

0 Это первая строка
1 это вторая строка
2 это третья строка
3 это четвертая строка
4 это последняя, пятая строка

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

Детальный разбор построчного чтения файла в Python:

1. Первым делом мы открываем файл:

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

  • путь к файлу;
  • режим работы с файлом. Это не обязательный параметр, который по умолчанию принимает значение «r» (read), что позволяет открыть файл для чтения. Давайте взглянем, какие существуют режимы работы с файлами в Python:
    • r — (от английского слова read), режим позволяет открыть файл для чтения текста;
    • w — (от английского слова write) — позволяет открыть файл для записи текста. Если в файле уже присутствует какая-то информация, она будет стерта;
    • a — (от английского add) — используется для открытия файла в режиме «дозаписи», при котором к существующим в файле данным будет добавлена новая информация. При этом старые данные также остаются в файле;
    • rb — режим чтения двоичных данных;
    • wb — режим записи двоичных файлов.

Так как нам необходимо прочитать файл, то подходящий нам режим работы с файлом — «r», который является режимом по умолчанию. А значит, нет необходимости его указывать.

Для открытия файла мы воспользовались строкой вида:

with open(path_to_file) as file:

Мы не случайно использовали ключевое слово width в качестве обертки при открытии файла — этот маленький фокус гарантирует нам автоматическое закрытие файла по завершению работы с ним.

Удобно, не правда ли? Если бы за мной так прибирали посуду после извлечения из нее содержимого… Однако, такая возможность в Python появилась только в версии 2.5. До этого закрытие файла нужно было номинировать функцией close(). И выглядело это так:

# открываем файл. Обратите внимание, нет with
<strong>file = open(path_to_file, «r»)</strong>
# делам свои делишки с содержимым файла
# закрываем файл
<strong>file.close()</strong>

Такой вариант и по сей день имеет место быть, часто используется и отлично работает. Однако первый вариант имеет «защиту от дурака», чем лично для меня повышает свою привлекательность.

2. Считываем данные из открытого файла

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

path_to_file = «путь_к_файлу»

# выводим строки
with open(path_to_file) as file:
    for line in file:
        print(line)


# выводим строки и их номера
with open(path_to_file) as file:
    for num_line, line in enumerate(file):
        print(num_line, line)

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

1. Метод read(file)

Метод read(file) — считывает все данные из файла file и возвращает их в виде одной текстовой строки. Этот вариант подходит для файлов небольшого размера:

path_to_file = «путь_к_файлу»

with open(path_to_file) as file:
        print( file.read())

Программа выведет на экран:

Это первая строка
это вторая строка
это третья строка
это четвертая строка
это последняя, пятая строка

2. Метод readline()

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

path_to_file = «путь_к_файлу»

with open(path_to_file) as file:
    line= file.readline()
    while line:
        print(line)
        line= file.readline()

Результат работы кода:

Это первая строка
это вторая строка
это третья строка
это четвертая строка
это последняя, пятая строка

3. Метод readlines()

Метод readlines() возвращает содержимое файла в виде списка строк:

path_to_file = «путь_к_файлу»

with open(path_to_file) as file:
    print(file.readlines())

Результат работы кода:

['Это первая строка\n', 'это вторая строка\n', 'это третья строка\n', 'это четвертая строка\n', 'это последняя, пятая строка']

Предпросмотр(откроется в новой вкладке)

Используя метод readlines() можно легко получить доступ к нужной строке, допустим к строке с индексом 3:

path_to_file = «путь_к_файлу»

with open(path_to_file) as file:
    print(file.readlines()[3])

Вывод на экран:

это четвертая строка

Так как Python нумерует строки с 0, то 3-й индекс в моем файле принадлежит четвертой строке

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

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