- Чтение файла построчно в список на Python
- Использование встроенной функции open()
- Использование генераторов
- Как прочитать файл построчно в Python
- Пример 1: Чтение файла построчно функцией readline()
- Как использовать функцию file.readline()
- Пример 2: Чтение строк как список функцией readlines()
- Пример 3: Считываем файл построчно из объекта File
- Чтение файлов#
- read #
- readline #
- readlines #
- seek #
Чтение файла построчно в список на Python
В процессе работы с файлами на языке программирования Python часто возникает задача построчного чтения файла и сохранения каждой строки как элемента списка. Допустим, у вас есть текстовый файл, и вы хотите прочитать его содержимое построчно, преобразовав каждую строку в элемент списка.
В Python это можно сделать несколькими способами. Рассмотрим один из самых простых и распространенных.
Использование встроенной функции open()
Первый способ — использовать встроенную функцию open() . В этом случае файл будет открыт в режиме чтения (‘r’) и каждая строка файла будет прочитана и добавлена в список с помощью метода readlines() .
with open('filename.txt', 'r') as file: lines = file.readlines()
В этом примере filename.txt — это имя файла, который вы хотите прочитать. Метод readlines() возвращает список, где каждый элемент списка — это отдельная строка из файла.
Таким образом, после выполнения этого кода, переменная lines будет содержать список строк из файла filename.txt .
Этот метод прост и эффективен, однако стоит учесть, что он считывает весь файл в память сразу. Это может вызвать проблемы при работе с очень большими файлами, которые не умещаются в оперативной памяти компьютера.
Использование генераторов
Если требуется обработать большой файл, который не умещается в память, можно использовать генераторы. В этом случае файл будет считываться построчно, а не полностью, что позволяет значительно снизить потребление памяти.
with open('filename.txt', 'r') as file: lines = [line for line in file]
В этом примере используется генератор списка ( list comprehension ), который построчно читает файл и добавляет каждую строку в список.
Этот способ также прост и эффективен, но в отличие от первого, он позволяет обрабатывать файлы, которые не умещаются в оперативной памяти.
Оба представленных способа позволяют быстро и просто считать содержимое файла в список, выполнив построчное чтение.
Как прочитать файл построчно в Python
Существует много способов чтение из файла построчно в Python. Вы можете считать строки в список или обращаться к каждой из строк в цикле при помощи итератора или вызова функции объекта file.
В этом руководстве мы научимся считывать файл построчно, используя функции readline() , readlines() и объект файла на примерах различных программ.
Пример 1: Чтение файла построчно функцией readline()
В этом примере мы будем использовать функцию readline() для файлового объекта, получая каждую строку в цикле.
Как использовать функцию file.readline()
Следуйте пунктам приведенным ниже для того, чтобы считать файл построчно, используя функцию readline() .
- Открываем файл в режиме чтения. При этом возвращается дескриптор файла.
- Создаём бесконечный цикл while.
- В каждой итерации считываем строку файла при помощи readline() .
- Если строка не пустая, то выводим её и переходим к следующей. Вы можете проверить это, используя конструкцию 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. Это применимо и к предыдущим двум примерам.
Чтение файлов#
Посмотрим как считывать содержимое файлов, на примере файла r1.txt:
! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !
read #
Метод read - считывает весь файл в одну строку.
Пример использования метода read :
In [1]: f = open('r1.txt') In [2]: f.read() Out[2]: '!\nservice timestamps debug datetime msec localtime show-timezone year\nservice timestamps log datetime msec localtime show-timezone year\nservice password-encryption\nservice sequence-numbers\n!\nno ip domain lookup\n!\nip ssh version 2\n!\n' In [3]: f.read() Out[3]: ''
При повторном чтении файла в 3 строке, отображается пустая строка. Так происходит из-за того, что при вызове метода read , считывается весь файл. И после того, как файл был считан, курсор остается в конце файла. Управлять положением курсора можно с помощью метода seek .
readline #
Построчно файл можно считать с помощью метода readline :
In [4]: f = open('r1.txt') In [5]: f.readline() Out[5]: '!\n' In [6]: f.readline() Out[6]: 'service timestamps debug datetime msec localtime show-timezone year\n'
Но чаще всего проще пройтись по объекту file в цикле, не используя методы read. :
In [7]: f = open('r1.txt') In [8]: for line in f: . print(line) . ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !
readlines #
Еще один полезный метод - readlines . Он считывает строки файла в список:
In [9]: f = open('r1.txt') In [10]: f.readlines() Out[10]: ['!\n', 'service timestamps debug datetime msec localtime show-timezone year\n', 'service timestamps log datetime msec localtime show-timezone year\n', 'service password-encryption\n', 'service sequence-numbers\n', '!\n', 'no ip domain lookup\n', '!\n', 'ip ssh version 2\n', '!\n']
Если нужно получить строки файла, но без перевода строки в конце, можно воспользоваться методом split и как разделитель, указать символ \n :
In [11]: f = open('r1.txt') In [12]: f.read().split('\n') Out[12]: ['!', 'service timestamps debug datetime msec localtime show-timezone year', 'service timestamps log datetime msec localtime show-timezone year', 'service password-encryption', 'service sequence-numbers', '!', 'no ip domain lookup', '!', 'ip ssh version 2', '!', '']
Обратите внимание, что последний элемент списка - пустая строка.
Если перед выполнением split , воспользоваться методом rstrip , список будет без пустой строки в конце:
In [13]: f = open('r1.txt') In [14]: f.read().rstrip().split('\n') Out[14]: ['!', 'service timestamps debug datetime msec localtime show-timezone year', 'service timestamps log datetime msec localtime show-timezone year', 'service password-encryption', 'service sequence-numbers', '!', 'no ip domain lookup', '!', 'ip ssh version 2', '!']
seek #
До сих пор, файл каждый раз приходилось открывать заново, чтобы снова его считать. Так происходит из-за того, что после методов чтения, курсор находится в конце файла. И повторное чтение возвращает пустую строку.
Чтобы ещё раз считать информацию из файла, нужно воспользоваться методом seek , который перемещает курсор в необходимое положение.
Пример открытия файла и считывания содержимого:
In [15]: f = open('r1.txt') In [16]: print(f.read()) ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !
Если вызывать ещё раз метод read , возвращается пустая строка:
Но с помощью метода seek можно перейти в начало файла (0 означает начало файла):
После того как с помощью seek курсор был переведен в начало файла, можно опять считывать содержимое:
In [19]: print(f.read()) ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !