
Работа с файлами в Python часто требует обработки не одной, а сразу нескольких строк. Важно понимать, какие методы позволяют считать блоки текста и как они отличаются по скорости и удобству.
Функция readlines() загружает весь файл в список, где каждая строка становится отдельным элементом. Этот способ удобен для небольших файлов, но при больших объёмах данных потребляет много памяти.
Если нужно ограничить количество строк, можно использовать цикл с функцией readline(). Такой подход позволяет считывать текст поэтапно, что снижает нагрузку на память.
Для обработки потока данных предпочтительнее применять итерацию по объекту файла: for line in file. Это даёт возможность читать строки последовательно, не загружая весь файл целиком.
Чтение фиксированного количества строк с помощью метода readline()

Метод readline() возвращает одну строку из файла за один вызов. Чтобы получить несколько строк подряд, его вызывают внутри цикла с заданным числом итераций.
Пример: нужно считать первые три строки файла:
with open("data.txt", "r", encoding="utf-8") as f:
for _ in range(3):
line = f.readline()
if not line:
break
print(line.strip())
Проверка if not line необходима, если в файле меньше строк, чем указано. В таком случае чтение остановится корректно.
Использование readline() удобно, когда требуется ограничить количество обрабатываемых строк и избежать загрузки всего файла в память.
Использование цикла for для построчного чтения
Цикл for позволяет проходить по файлу строка за строкой без загрузки всего содержимого в память. Такой способ подходит для работы с большими файлами.
Пример:
with open("data.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip())
Здесь каждая итерация возвращает одну строку. Метод strip() убирает перевод строки и лишние пробелы. Если нужен контроль над количеством строк, можно добавить enumerate() и ограничение по номеру:
with open("data.txt", "r", encoding="utf-8") as f:
for i, line in enumerate(f, start=1):
if i > 10:
break
print(line.strip())
Цикл for автоматически закрывает итерацию при достижении конца файла, что делает его надёжным инструментом для последовательного чтения.
Получение списка строк с помощью readlines()
Метод readlines() возвращает все строки файла в виде списка, где каждая строка оканчивается символом перевода строки \n. Такой подход удобен, если необходимо обработать файл построчно без ручного цикла чтения.
Пример:
with open("data.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print(lines)
В результате каждая строка файла окажется отдельным элементом списка. При этом символы \n сохраняются, их можно удалить методом strip() или rstrip() при обработке:
cleaned = [line.strip() for line in lines]
Метод подходит для небольших файлов. При работе с большими объёмами данных предпочтительнее использовать итерацию по объекту файла, чтобы не загружать всё содержимое в память.
Ограничение числа строк при чтении через itertools.islice()
Функция itertools.islice() позволяет задать точный диапазон строк, которые нужно прочитать, не загружая весь файл в память. Это особенно удобно при работе с большими логами или CSV.
Пример чтения первых пяти строк:
from itertools import islice
with open("data.txt", "r", encoding="utf-8") as f:
for line in islice(f, 5):
print(line.strip())
Можно задать начальный индекс и конечный предел:
with open("data.txt", "r", encoding="utf-8") as f:
for line in islice(f, 10, 20):
print(line.strip())
Сравнение параметров islice():
| Сигнатура | Поведение |
|---|---|
islice(f, n) |
чтение первых n строк |
islice(f, start, stop) |
чтение строк с start по stop-1 |
islice(f, start, stop, step) |
чтение с шагом, например каждая вторая строка |
Подход исключает избыточные операции: не требуется считывать весь файл, строки обрабатываются потоково.
Обработка больших файлов построчно без загрузки в память
При работе с файлами размером в гигабайты критично избегать загрузки всего содержимого в память. В Python для этого удобно использовать итерацию по файлу.
with open("data.log", "r", encoding="utf-8") as f:
for line in f:
# обработка строки
process(line)
Файл открывается в режиме чтения, а цикл for считывает данные построчно, не создавая лишних копий.
with open(...)гарантирует закрытие файла даже при ошибках.- Итерация по объекту файла не использует метод
readlines(), который загружает всё содержимое в список. - Можно добавить счётчик строк с помощью
enumerate(f, start=1).
Для двоичных файлов или контроля буфера используйте open(..., buffering=8192). Размер буфера подбирается экспериментально в зависимости от скорости диска.
with open("bigfile.csv", "r", buffering=16384) as f:
for i, row in enumerate(f):
if i % 100000 == 0:
print(i)
Такой подход позволяет обрабатывать файлы потоково, выполнять фильтрацию или запись результатов в другой файл без перегрузки памяти.
Чтение нескольких строк из стандартного ввода
Для чтения нескольких строк в Python чаще всего используют цикл с функцией input(). Если заранее известно количество строк, можно выполнить:
n = int(input())
lines = [input() for _ in range(n)]
Здесь n задаёт число строк, которые будут считаны, а список lines хранит каждую строку отдельно.
Если количество строк заранее неизвестно, удобен цикл с обработкой исключения EOFError:
lines = []
while True:
try:
line = input()
lines.append(line)
except EOFError:
break
Этот подход позволяет считывать строки до конца ввода. Каждая новая строка добавляется в список lines без потери данных.
Для обработки больших объёмов данных удобнее использовать sys.stdin:
import sys
lines = [line.rstrip('\\n') for line in sys.stdin]
Метод rstrip(‘\\n’) удаляет символы новой строки, обеспечивая чистые строки в списке. Этот способ эффективен при чтении файлов через перенаправление ввода или при потоковой обработке.
При необходимости сразу разделять строки на слова применяют split():
words = [word for line in lines for word in line.split()]
Такой приём формирует плоский список всех слов из считанных строк без дополнительных циклов.
Чтение нескольких строк в формате CSV
Для работы с CSV-файлами в Python применяется встроенный модуль csv. Открытие файла выполняется через функцию open с указанием режима ‘r’ и кодировки, например utf-8:
with open('data.csv', 'r', encoding='utf-8') as file:
Создание объекта чтения осуществляется с помощью csv.reader, который возвращает строки в виде списков:
reader = csv.reader(file)
Чтобы считать все строки, используется цикл for:
for row in reader:
print(row)
Для выборочного считывания первых N строк можно применить функцию itertools.islice:
from itertools import islice
with open('data.csv', 'r', encoding='utf-8') as file:
reader = csv.reader(file)
for row in islice(reader, 5):
print(row)
Если необходимо преобразовать строки в словари с ключами из заголовка, используется csv.DictReader:
with open('data.csv', 'r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
print(row['Имя'], row['Возраст'])
При работе с большими файлами рекомендуется считывать строки по частям, чтобы не перегружать память, или использовать генераторы, возвращающие по одной строке за раз.
Для файлов с нестандартными разделителями параметр delimiter указывает нужный символ, например csv.reader(file, delimiter=’;’).
Подсчёт количества строк при итерации по файлу

Для подсчёта строк в файле Python позволяет использовать итерацию напрямую по объекту файла. Такой метод экономит память, так как строки обрабатываются по одной, без загрузки всего файла.
Пример базового подхода:
count = 0
with open('file.txt', 'r', encoding='utf-8') as f:
for line in f:
count += 1
print(f"Количество строк: {count}")
Рекомендации по использованию:
- Используйте контекстный менеджер
withдля автоматического закрытия файла. - Учитывайте, что каждая итерация возвращает строку с символом переноса строки
\n, если нужно работать с содержимым без него, применяйтеline.strip(). - Для больших файлов такой подход предпочтительнее чтения всего файла через
readlines(), чтобы не перегружать память. - Если нужна проверка на непустые строки, добавьте условие
if line.strip(): count += 1.
Альтернативный вариант с генератором:
with open('file.txt', 'r', encoding='utf-8') as f:
count = sum(1 for _ in f)
print(f"Количество строк: {count}")
Использование генератора ускоряет подсчёт, так как не создаёт промежуточный список. Этот метод особенно удобен для обработки файлов с миллионами строк.
