Временные файлы и директории нужны, если промежуточные данные слишком велики, чтобы держать их в оперативной памяти. Или бывают случаи, что программа или компонент обрабатывает только файлы и не может принимать данные по другим каналам.
Для создания временных файлов и директорий есть модуль tempfile. Удобно, что временные файлы создаются в специальном месте ФС и удаляются автоматически после закрытия. Нам можно не думать, куда положить временный файл, как его назвать и как почистить мусор после выполнения программы.
import tempfile with tempfile.NamedTemporaryFile() as fp: print(fp.name) # путь к файлу fp.write(b'Hello world!') fp.seek(0) print(fp.read())
fp
– файло-подобный объект, вроде того, что идет из open
. С ним работают также, как с обычным файлом. Он будет удален в момент закрытия.
Есть еще TemporaryFile
. Отличие NamedTemporaryFile
от TemporaryFile
в том, что NamedTemporaryFile
будет гарантированно виден в файловой системе и иметь атрибут name
, тогда как второй может быть и не виден в ФС. NamedTemporaryFile
можно создать с ключем delete=False
, чтобы он не был удален. А TemporaryFile
всегда будет удален при закрытии.
Режим открытия временного файла по умолчанию "w+b"
, т.е. можно писать и читать бинарный данные. Можно изменить передав аргумент mode
:
tempfile.NamedTemporaryFile(mode='w')
TemporaryDirectory
– создает временную директорию и возвращает строку – путь к ней. Мы можем создавать в директории любые файлы в любом количестве. После закрытия контекстного менеджера директория и все файлы в ней будут автоматически удалены. Очень удобно! Можно не запоминать названия или ссылки на файлы. Пример:
with tempfile.TemporaryDirectory() as temp: with open(os.path.join(temp, '1.txt'), 'w') as f: f.write('hello')
Если надо вручную очистить (можно только 1 раз, после она будет удалена):
tmp = tempfile.TemporaryDirectory() with open(os.path.join(tmp.name, '1.txt'), 'w') as f: f.write('hello') tmp.cleanup() # очистка
Узнать где хранятся временные файлы:
>>> tempfile.gettempdir() '/var/folders/m8/1_wxy73215q9n2vrjetnw0xjc0000gn/T'
Эта директория берется из переменных окружения TMPDIR
, TEMP
, TEMP
или это директория C:\TEMP, C:\TMP, \TEMP и \TMP
(для Windows) или /tmp, /var/tmp и /usr/tmp
для остальных систем.
Как поменять место хранения временных данных процесса?
- Изменить переменную окружения:
TMPDIR="/home/me/temp" python my_program.my
- Передать в функции создания временных файлов аргумент dir с нужным путем:
tempfile.NamedTemporaryFile(dir='/home/me')
Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈