Модуль tempfile
создает временные файлы и каталоги. Работает на всех поддерживаемых платформах. Модуль определяет несколько конструкторов высокого уровня, которые обеспечивают автоматическую очистку и могут использоваться в качестве менеджеров контекста. Функции tempfile.mkstemp() и tempfile.mkdtemp() являются функциями более низкого уровня, которые требуют ручной очистки.
Приложения, которым требуются временные файлы для хранения данных, без необходимости делиться этим файлом с другими программами, должны использовать функцию tempfile.TemporaryFile()
для создания файлов. Функция создает файл и на платформах, где это возможно, немедленно отменяет связь с ним. Это делает невозможным для другой программы найти или открыть файл, поскольку в таблице файловой системы нет ссылки на него.
Когда требуется несколько временных файлов, может быть удобнее создать один временный каталог с помощью tempfile.TemporaryDirectory()
и открыть все файлы в этом каталоге.
Все вызываемые пользователем функции и конструкторы принимают дополнительные аргументы, которые позволяют напрямую контролировать расположение и имя временных файлов и каталогов. Имена файлов, используемые этим модулем, содержат строку случайных символов, которая позволяет безопасно создавать эти файлы в общих временных каталогах. Для обеспечения обратной совместимости порядок аргументов несколько странный. Для ясности рекомендуется использовать ключевые аргументы.
Вот несколько примеров типичного использования модуля tempfile
:
>>> import tempfile # Создать временный файл и # записать в него некоторые данные >>> fp = tempfile.TemporaryFile() >>> fp.write(b'Hello world!') # Читать данные из файла >>> fp.seek(0) >>> fp.read() # b'Hello world!' # Закройте файл, он будет удален >>> fp.close()
Создать временный файл, используя менеджер контекста
>>> with tempfile.TemporaryFile() as fp: ... fp.write(b'Hello world!') ... fp.seek(0) ... fp.read() # b'Hello world!' >>> # Файл закрыт и удален
Создать временный каталог с помощью диспетчера контекста
>>> with tempfile.TemporaryDirectory() as tmpdirname: ... print('created temporary directory', tmpdirname) >>> # Каталог и содержимое были удалены