Основные операции ввода вывода: чтение текстовых данных из файлов
Основные подходы к чтению текста из файла
Считывание всего содержимого через read()
Наиболее простой и часто используемый способ - метод read() объекта файла, открытого в текстовом режиме. Для корректного закрытия файла применяется контекстный менеджер with.
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)ввод программ на python (ввод данных в программе python)
Если файл небольшой, этот метод эффективен и удобен. Указание кодировки обязательно при нестандартных настройках системы.
Возможные проблемы:
- FileNotFoundError - если файла не существует. Решение: проверять существование через os.path.exists() или ловить исключение.
- UnicodeDecodeError - если файл сохранён в другой кодировке. Решение: указать правильный параметр encoding, например 'cp1251' для Windows.
- MemoryError - при попытке прочитать огромный файл целиком. Решение: использовать построчное чтение.
Как прочитать файл построчно?
Для обработки больших файлов удобно читать строку за строкой с помощью цикла for line in f.
with open('data.txt', 'r', encoding='utf-8') as f:
for line in f:
print(line.rstrip())Python file io (ввод-вывод файлов в python)
Такой подход не загружает весь файл в память, а обрабатывает каждую строку по мере чтения.
Как получить список всех строк в файле?
Метод readlines() возвращает список строк, каждая из которых содержит символ новой строки.
with open('lines.txt', 'r') as f:
lines = f.readlines()
print(lines)Python temp files (временные файлы в python)
Удобно, если нужно работать сразу со всеми строками как с элементами списка. Для удаления лишних пробелов часто применяют list(map(str.strip, lines)).
Проблема: при использовании readlines() на большом файле может не хватить памяти. Альтернатива - построчный цикл.
Как прочитать файл с нестандартной кодировкой, например cp1251?
Параметр encoding в open() позволяет указать любую кодировку, поддерживаемую Python.
with open('windows.txt', 'r', encoding='cp1251') as f:
text = f.read()
print(text)Python index files (индексация файлов в python)
Если кодировка неизвестна, можно воспользоваться модулем chardet для автоматического определения.
Как прочитать файл, используя pathlib?
Библиотека pathlib предоставляет объектно-ориентированный интерфейс работы с путями и файлами.
from pathlib import Path
path = Path('example.txt')
content = path.read_text(encoding='utf-8')
print(content)File python class (класс для работы с файлами в python)
Метод read_text() автоматически открывает и закрывает файл, принимает кодировку.
Как прочитать большой файл, не загружая его в память целиком?
Итерация по строкам с последующей обработкой каждой строки в цикле - наилучший вариант.
with open('huge_file.log', 'r') as f:
for line in f:
if len(line) > 100:
print('Длинная строка:', line[:50])Python file utf 8 (кодировка utf-8 для файлов в python)
Для текстовых файлов с разделителями можно также читать блоками фиксированного размера через f.read(size).
Типичная ошибка: попытка сохранить все строки в список или строку при большом объёме данных приводит к переполнению памяти. Итерация решает эту проблему.
Как прочитать файл с обработкой ошибок?
Обработка исключений (try/except) позволяет корректно реагировать на отсутствие файла или проблемы с доступом.
try:
with open('config.txt', 'r') as f:
data = f.read()
print(data)
except FileNotFoundError:
print('Файл не найден. Проверьте путь.')
except PermissionError:
print('Нет прав на чтение файла.')
except UnicodeDecodeError as e:
print('Ошибка декодирования:', e)
Такой код не прерывается при ошибке, а сообщает пользователю о проблеме.
Расширенные примеры чтения текстовых файлов
# Пример 1: Чтение всего файла и подсчёт количества символов
with open('poem.txt', 'r', encoding='utf-8') as f:
text = f.read()
print('Количество символов:', len(text))
Количество символов: 1234
# Пример 2: Построчное чтение с номерами строк
with open('log.txt', 'r') as f:
for i, line in enumerate(f, 1):
print(f'{i}: {line.rstrip()}')
# Пример 3: Чтение файла и удаление пустых строк
lines = []
with open('dirty.txt', 'r', encoding='utf-8') as f:
for line in f:
if line.strip():
lines.append(line.rstrip())
print('Непустых строк:', len(lines))
Непустых строк: 5
# Пример 4: Чтение и запись отфильтрованных строк в новый файл
with open('source.txt', 'r') as src, open('filtered.txt', 'w') as dst:
for line in src:
if not line.startswith('#'):
dst.write(line)
print('Строки без комментариев записаны в filtered.txt')
# Пример 5: Чтение в двоичном режиме и ручное декодирование
with open('data.bin', 'rb') as f:
raw = f.read()
text = raw.decode('utf-8', errors='replace')
print(text[:200])
# Пример 6: Использование Path.read_text() с проверкой существования
from pathlib import Path
path = Path('example.txt')
if path.exists():
content = path.read_text(encoding='utf-8')
print(content[:100])
else:
print('Файл не найден')
# Пример 7: Чтение из stdin (например, конвейер в shell)
import sys
for line in sys.stdin:
print(line.upper(), end='')
# Пример 8: Чтение с автоматическим определением кодировки (требуется chardet)
import chardet
with open('unknown.txt', 'rb') as f:
raw = f.read()
result = chardet.detect(raw)
encoding = result['encoding']
text = raw.decode(encoding)
print('Кодировка:', encoding)
print(text[:200])
# Пример 9: Чтение CSV-подобного файла вручную (без pandas)
with open('data.csv', 'r') as f:
for line in f:
row = line.strip().split(',')
print(row)
# Пример 10: Чтение с игнорированием ошибки FileNotFoundError через contextlib.suppress
from contextlib import suppress
with suppress(FileNotFoundError):
with open('optional.txt', 'r') as f:
print(f.read())
else:
print('Файл отсутствует, программа продолжает работу')