JavaRush /Курсы /Модуль 1: Python Core /Чтение данных из файла

Чтение данных из файла

Модуль 1: Python Core
12 уровень , 1 лекция
Открыта

2.1 Чтение всего файла

В Python несколько способов чтения текстовых файлов. Каждый из этих методов имеет свои преимущества и подходит для различных ситуаций. Основные способы чтения текстовых файлов: чтение всего содержимого, чтение построчно, чтение с указанием количества символов и другие.

Метод read() считывает всё содержимое файла в одну строку.


file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()

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

2.2 Чтение всех строк файла

Есть некая альтернатива методу read() — это метод readlines(). Он тоже читает в память сразу весь файл, но возвращает его не в виде одной большой строки, а в виде списка строк — каждая строка файла будет отдельной строкой списка.

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


file = open('example.txt', 'r')
lines = file.readlines()
for line in lines:
    print(line.strip())  # strip() удаляет лишние пробелы и символы новой строки
file.close()

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

2.3 Итерация по строкам файла

Объект file имеет встроенный итератор, поэтому можно пройтись по его содержимому с помощью цикла for. Это позволяет читать файл построчно, не загружая весь файл в память.

Пример:


file = open('example.txt', 'r')
for line in file:
    print(line.strip())  
file.close()

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

Давайте ещё раз сравним этот подход и предыдущий:

Использование итератора Использование функции readlines()

file = open('example.txt', 'r')

for line in file:
    print(line.strip())  
                            
file.close()
                

file = open('example.txt', 'r')
            
lines = file.readlines()
for line in lines:
    print(line.strip())  
                        
file.close()
                

Такой способ проще и быстрее. Однако когда вы будете работать с реальными проектами, иногда будет быстрее загрузить все данные сразу в память и работать с ними уже там.

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

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

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

2.4 Чтение части файла

Если файл слишком большой, вы можете читать его по частям. В метод read(n) можно передать параметр n — количество символов, которое нужно прочитать. Если в файле символов меньше, чем n, то метод read() просто прочитает файл до конца.

Пример:


file = open('example.txt', 'r')
content = file.read(10)  # Читает первые 10 символов
print(content)
file.close()

Это удобно для чтения больших файлов частями или для обработки фиксированных блоков данных. Но такой подход игнорирует разбиение файла по строкам — строки могут разрываться в середине.

2.5 Чтение файла построчно

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

Метод readline() считывает одну строку из файла за раз.

Пример:


file = open('example.txt', 'r')
line = file.readline()
while line:
    print(line.strip())
    line = file.readline()
file.close()

В этом примере мы читаем содержимое файла построчно, пока прочитанная строка не будет пустой.

2
Задача
Модуль 1: Python Core, 12 уровень, 1 лекция
Недоступна
Чтение всего файла
Чтение всего файла
2
Задача
Модуль 1: Python Core, 12 уровень, 1 лекция
Недоступна
Итерация по строкам файла
Итерация по строкам файла
Комментарии (9)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анатолий Уровень 32
8 февраля 2026
❤️
Slevin Уровень 39
8 июля 2025
Кстати, по-умолчанию файл открывается в режиме для чтения. Нет необходимости указывать режим 'r'
Slevin Уровень 39
8 июля 2025
Первая задача - копия задачи с прошлой лекции. Думали мы не заметим? Мы заметили! Вторая задача не приняла итератор for через .readlines() Плохо.
9 августа 2025
file = open('example.txt', 'r') for line in file: print(line.strip()) file.close() Нужно использовать итератор без .readlines(). Как в примере описано. через .readlines() считается как использование функции readlines()
Igor Уровень 40
11 августа 2025
скорее, ключевое было "используя итератор" а readlines это не итератор, а итерируемый объект, у него нет __next__()

lines = file.readlines()
print(dir(lines))
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Slevin Уровень 39
11 августа 2025
Объект файла в Python сам является итератором по строкам (реализует метод __iter__() и __next__()), поэтому альтернативно можно получить все строки через list(file_object). Но в целом, не спорю, хотели цикл с for, пусть им будет цикл с for...
14 февраля 2025

while line:
    print(line.strip())
    line = file.readline()
file.close()
В этом примере мы читаем содержимое файла построчно, пока прочитанная строка не будет пустой. То есть программа будет читать до первой пустой строки (которая разделяет 2 абзаца). Есть ли возможность возвращать EOF в методе readline?
Ivan Уровень 59
13 мая 2025
>То есть программа будет читать до первой пустой строки Такого не будет, так как пустые строки на самом деле не пустые, а содержат символ переноса строки.
Slevin Уровень 39
8 июля 2025
Подтверждаю предыдущего автора. Проверил - пустые строки считываются прекрасно и продолжается чтение после