tempfile — Создание временных файлов и папок

Модуль tempfile используется для генерации временных файлов и директорий. Он кроссплатформенный и работает безопасно: временные папки создаются с правильными правами доступа, чтобы только запустивший код юзер имел к ним доступ.

Лучший способ работы — использование контекстных менеджеров (with), так как они гарантированно уничтожают временный мусор сразу после выхода из блока.

import tempfile

Временные директории

Частый сценарий: скачать tar.gz из сети, распаковать, обработать файлы и всё удалить, не засоряя жесткий диск сервера.

import tempfile
import os

# Создаст папку где-то в /tmp/ и уничтожит её при окончании 'with'
with tempfile.TemporaryDirectory() as temp_dir:
    print(f"Успешно создана папка: {temp_dir}")
    
    # Работаем как с обычной папкой
    filepath = os.path.join(temp_dir, 'log.txt')
    with open(filepath, 'w') as f:
        f.write("Секретные данные на пару секунд.")

print("Папка полностью удалена.")
# Убедимся:
# print(os.path.exists(temp_dir)) возвращает False!

Выделенные временные файлы (в ОЗУ)

Если нужно буферизировать или собрать большой файл без сохранения директории, применяются временные объекты (по сути "фейковые" файлы).

import tempfile

# SpooledTemporaryFile держит данные в оперативной памяти (RAM)
# и переносит их на жесткий диск, только если они превысят max_size в байтах.
with tempfile.SpooledTemporaryFile(max_size=2000, mode='w+') as tfile:
    tfile.write("Тестовые данные")
    tfile.seek(0) # Перемотка "каретки" назад перед чтением
    current = tfile.read()
    print(current)

Если вам все же нужно передать физический путь файла другой программе, используйте NamedTemporaryFile(delete=False).


Полный справочник API (API Reference)

Главные классы (Менеджеры контекста)

Класс Описание
tempfile.TemporaryFile(mode='w+b') Возвращает анонимный файловый объект (удаляется сразу при закрытии).
tempfile.NamedTemporaryFile() Аналог TemporaryFile, но гарантированно имеет видимое имя файла в ОС. Доступно через атрибут .name. На Windows закрытие такого файла сторонней программой может вызвать ошибку.
tempfile.SpooledTemporaryFile() Начинает писать как StringIO (чисто в RAM), пока не достигнет лимита, затем становится физическим TemporaryFile. Максимальная скорость для мелких файлов.
tempfile.TemporaryDirectory() Возвращает строку — абсолютный путь к папке. Папка удаляется вместе со ВСЕМ её содержимым при выходе из with.

Функции

Функция Описание
tempfile.mkdtemp() Создает папку и возвращает путь к ней. Внимание: В отличие от TemporaryDirectory, эту папку нужно удалять ВРУЧНУЮ через shutil.rmtree().
tempfile.gettempdir() Возвращает стандартную папку ОС для хранения кэша (в Windows это C:\Temp, в Linux — /tmp).