Ответ
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()) # Получить всё содержимое