Работа с файлами в Python: открытие, чтение, запись и управление
Ввод-вывод файлов в Python
Научитесь открывать, читать, писать и закрывать файлы в Python с понятными примерами и лучшими практиками.
Видео: Чтение и запись файлов в Python
Файлы
Файлы — это именованные области на диске, хранящие данные постоянно. Поскольку ОЗУ易失но, мы полагаемся на файлы для сохранения информации между запусками программы.
При работе с файлом типичная последовательность: открыть → читать/писать → закрыть.
Открытие файлов в Python
Встроенная функция open() возвращает файловый объект для выполнения операций ввода-вывода. Её сигнатура:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Ключевые моменты:
modeуправляет операцией:r(чтение),w(запись, усекает),a(дозапись),x(исключительное создание).t(текст) — по умолчанию;b(бинарный) возвращает объектыbytes.+позволяет одновременное чтение и запись.- Всегда указывайте
encodingпри работе с текстом, чтобы избежать платформенно-зависимых значений по умолчанию (например,cp1252в Windows,utf-8в Linux).
| Режим | Описание |
|---|---|
r | Чтение (по умолчанию) |
w | Запись; создаёт новый или усекает существующий |
x | Исключительное создание; ошибка, если файл существует |
a | Дозапись; создаёт, если отсутствует |
t | Текстовый режим (по умолчанию) |
b | Бинарный режим |
+ | Чтение и запись |
f = open("test.txt") # r/rt
f = open("test.txt", "w") # запись
f = open("img.bmp", "r+b") # чтение/запись бинарный
Так как a — это символ, он не эквивалентен числу 97, если не закодирован. Явно задайте encoding='utf-8' для текстовых файлов.
f = open("test.txt", mode='r', encoding='utf-8')
Закрытие файлов в Python
Правильное закрытие файла освобождает системные ресурсы. Метод close() прост, но использование менеджера контекста — самый безопасный паттерн.
with open("test.txt", encoding='utf-8') as f:
# выполняем файловые операции
pass
Менеджер контекста гарантирует закрытие даже при исключении. Если открываете файл вручную, оберните в блок try...finally.
try:
f = open("test.txt", encoding='utf-8')
# операции
finally:
f.close()
Запись в файлы в Python
Используйте режимы w, a или x для записи. w перезаписывает существующее содержимое; a сохраняет его.
Метод write() принимает строку (или bytes для бинарного) и возвращает количество записанных символов.
with open("test.txt", "w", encoding='utf-8') as f:
f.write("my first file\n")
f.write("This file\n\n")
f.write("contains three lines\n")
Не забывайте включать символы новой строки для разделения строк.
Чтение файлов в Python
Открывайте с режимом r. Метод read() принимает необязательный аргумент size; без него читает до EOF.
f = open("test.txt", "r", encoding='utf-8')
print(f.read(4)) # 'This'
print(f.read(4)) # ' is '
print(f.read()) # оставшееся содержимое
f.close()
Перемещайте курсор с seek() и запрашивайте позицию с tell():
print(f.tell()) # текущая позиция
f.seek(0) # возврат в начало
print(f.read()) # прочитать всё
Эффективная итерация по строкам:
for line in f:
print(line, end='')
Альтернативно, readline() и readlines() дают доступ по строкам.
Методы файловых объектов в Python
Ниже — краткий справочник самых распространённых методов файлов в текстовом режиме.
| Метод | Описание |
|---|---|
| close() | Закрывает файл. |
| detach() | Отсоединяет базовый бинарный буфер. |
| fileno() | Возвращает файловый дескриптор. |
| flush() | Сбрасывает буфер записи. |
| isatty() | Проверяет, является ли поток интерактивным. |
| read(n) | Читает до n символов; None читает до EOF. |
| readable() | Является ли поток читаемым? |
| readline(n=-1) | Читает одну строку, до n символов. |
| readlines(n=-1) | Возвращает список строк, до n символов. |
| seek(offset, from_=SEEK_SET) | Перемещает курсор в offset от from_ (начало, текущее, конец). |
| seekable() | Поддерживает ли поток произвольный доступ? |
| tell() | Получает текущую позицию курсора. |
| truncate(size=None) | Изменяет размер файла до size байт. |
| writable() | Является ли поток записываемым? |
| write(s) | Записывает строку s; возвращает число записанных символов. |
| writelines(lines) | Записывает итерируемую коллекцию строк. |
Python
- Ввод-вывод в C: scanf() и printf() — подробное руководство
- Освоение типов данных в Python: практическое руководство
- Мастерство операторов Python: Полное руководство
- Словари в Python: создание, манипуляции и продвинутые техники
- Работа с файлами в Python: открытие, чтение, запись и управление
- Проверка существования файлов и директорий в Python — практическое руководство
- Python JSON: кодирование, декодирование и работа с файлами — практическое руководство
- Освоение ввода-вывода файлов в C: создание, открытие и управление файлами
- Работа с файлами в C#: FileStream, StreamReader, StreamWriter и File API
- Ввод-вывод файлов в Python: полное руководство по операциям I/O