Ответ
Python предоставляет полный контроль над операциями файлового ввода-вывода через встроенные функции и стандартные библиотеки. Ключевые аспекты, которыми можно управлять:
1. Путь к файлу и директории
Современный и кросс-платформенный подход — использование модуля pathlib.
from pathlib import Path
# Создание пути к файлу
data_dir = Path("./data")
file_path = data_dir / "my_file.txt"
# Создание родительских директорий, если они не существуют
data_dir.mkdir(parents=True, exist_ok=True)
2. Режим доступа
При открытии файла с помощью open() можно указать режим:
'r'— чтение (по умолчанию).'w'— запись (файл перезаписывается).'a'— дозапись в конец файла.'x'— эксклюзивное создание (ошибка, если файл существует).'+'— добавляет возможность чтения и записи (w+,r+).'b'— бинарный режим (для изображений, исполняемых файлов).'t'— текстовый режим (по умолчанию).
3. Кодировка
Для текстовых файлов критически важно указывать кодировку, чтобы избежать ошибок. Best practice — всегда явно указывать encoding='utf-8'.
with open(file_path, 'w', encoding='utf-8') as f:
f.write("Привет, мир!")
4. Управление ресурсами и буферизация
- Контекстный менеджер
with: Гарантирует автоматическое и безопасное закрытие файла даже в случае возникновения исключений. - Буферизация: Параметр
bufferingвopen()контролирует, как данные кэшируются перед записью на диск. Значения:0(отключена, только в бинарном режиме),1(построчная),-1(буфер по умолчанию, обычно 4-8 КБ).
5. Работа с метаданными
Модуль os позволяет получать информацию о файле без его чтения.
import os
if file_path.exists():
stat_info = os.stat(file_path)
print(f"Размер файла: {stat_info.st_size} байт")
print(f"Время последнего изменения: {stat_info.st_mtime}")
6. Работа в памяти
Модуль io позволяет работать со строками или байтами так, как будто это файлы на диске. Это полезно для тестирования или обработки данных без сохранения на диск.
import io
# Текстовый буфер в памяти
string_io = io.StringIO()
string_io.write("Это тестовая строка.")
print(string_io.getvalue()) # Получить всё содержимое