Построчное чтение файлов в Python
Чтение строк из файла в Python
Основной и самый эффективный способ
Для построчного чтения файла в Python чаще всего используют конструкцию with open и цикл for line in file. Этот метод автоматически закрывает файл, не загружает его целиком в память и прост в использовании.
with open('file.txt', 'r', encoding='utf-8') as file:
for line in file:
print(line.strip()) # удаляет символ новой строкиPython input readline (чтение строки через readline)
Возможные проблемы:
- Символ новой строки
\nостается в конце строки. Решение - использовать.strip()или.rstrip(). - Забыли указать кодировку - могут возникнуть ошибки при чтении файлов с не-ASCII символами.
- При очень больших файлах такой цикл работает эффективно, так как читает по одной строке, не загружая весь файл.
Как прочитать одну строку с помощью readline()?
Метод file.readline() возвращает одну строку из файла. Удобно, если требуется обработать только первые несколько строк.
with open('file.txt', 'r') as f:
first_line = f.readline().strip()
second_line = f.readline().strip()
print(first_line, second_line)чтение строки python (чтение строки в python)
Ошибки и решения:
- Если файл закончился,
readline()возвращает пустую строку'', а неNone. Это важно учитывать в условиях. - Не забывайте удалять символ перевода строки, иначе строки будут с лишним пробелом.
Как получить список всех строк с помощью readlines()?
Метод file.readlines() считывает все строки файла и возвращает список. Подходит для небольших файлов, когда нужны все строки сразу.
with open('file.txt', 'r') as f:
lines = f.readlines() # список строк с \n
lines_clean = [line.strip() for line in lines]Проблемы:
- Загрузка всего файла в память - для больших файлов может привести к переполнению.
- Каждая строка в списке содержит символ новой строки. Требуется очистка.
Как прочитать файл целиком и разделить на строки с помощью splitlines()?
Метод file.read().splitlines() читает весь текст и возвращает список строк без символа новой строки. Удобно, когда нужно быстро получить чистые строки.
with open('file.txt', 'r') as f:
lines = f.read().splitlines()Недостаток:
Весь файл загружается в память. Метод не подходит для больших файлов.
Как использовать pathlib для чтения строк?
Модуль pathlib предоставляет объектно-ориентированный интерфейс. Метод Path.read_text() возвращает весь текст, затем можно разбить на строки.
from pathlib import Path
file_path = Path('file.txt')
content = file_path.read_text(encoding='utf-8')
lines = content.splitlines()Внимание:
Аналогично read() - загрузка всего файла. Для больших файлов используйте file_path.open() и итерацию.
Как прочитать файл с игнорированием пустых строк?
В цикле фильтруем строки, содержащие только пробелы или пустые.
with open('file.txt', 'r') as f:
for line in f:
if line.strip(): # если строка не пустая
print(line.strip())Решение:
Использовать условие if line.strip() - проверяет, есть ли непробельные символы.
Расширенные примеры чтения строк
Чтение только определённых строк по индексу
Можно использовать enumerate, чтобы обработать строки с определённым номером.
with open('file.txt', 'r') as f:
for idx, line in enumerate(f, start=1):
if idx in (3, 5, 10):
print(f"Строка {idx}: {line.strip()}")Строка 3: Третья строка Строка 5: Пятая строка Строка 10: Десятая строка
Пропуск первых N строк
Используем itertools.islice или простой счетчик.
from itertools import islice
with open('file.txt', 'r') as f:
for line in islice(f, 2, None): # пропустить первые 2 строки
print(line.strip())Третья строка Четвертая строка ...
Чтение строк в обратном порядке
Сначала читаем все строки (подходит для небольших файлов), затем переворачиваем список.
with open('file.txt', 'r') as f:
lines = f.readlines()
for line in reversed(lines):
print(line.strip())Последняя строка Предпоследняя строка ...
Генератор для чтения больших файлов по частям
Можно создать генератор, который возвращает строки пакетами (chunks).
def read_lines_chunks(file_path, chunk_size=100):
with open(file_path, 'r') as f:
chunk = []
for line in f:
chunk.append(line.strip())
if len(chunk) == chunk_size:
yield chunk
chunk = []
if chunk:
yield chunk
for chunk in read_lines_chunks('big_file.txt', 200):
# обработка порции строк
print(f"Обработано {len(chunk)} строк")Обработано 200 строк Обработано 200 строк ...
Чтение строк с преобразованием типов
Если файл содержит числа, преобразуем каждую строку.
with open('numbers.txt', 'r') as f:
numbers = [int(line.strip()) for line in f if line.strip()]
print(numbers)[10, 20, 30, 40]
Фильтрация строк по регулярному выражению
Модуль re помогает отобрать строки, соответствующие шаблону.
import re
pattern = r'^\d{3}-\d{2}-\d{4}$' # паттерн для SSN
with open('data.txt', 'r') as f:
valid_lines = [line.strip() for line in f if re.match(pattern, line.strip())]
print(valid_lines)['123-45-6789', '987-65-4321']
Чтение файла с разными кодировками
Указываем правильный параметр encoding. При возникновении ошибки используем errors='replace' или errors='ignore'.
with open('file_cp1251.txt', 'r', encoding='cp1251', errors='replace') as f:
for line in f:
print(line.strip())Проблема:
Неверная кодировка приведёт к искажению текста или исключению UnicodeDecodeError. Рекомендуется заранее определять кодировку файла (например, через chardet).
Чтение строк из стандартного ввода (stdin)
Полезно для скриптов, принимающих данные из консоли или пайпа.
import sys
print("Введите строки (Ctrl+D для завершения):")
for line in sys.stdin:
print(f"Прочитано: {line.strip()}")