Использование модуля tempfile в Python

Использование модуля tempfile в Python

В этой статье рассмотрим модуль из стандартной библиотеки для создания временных файлов и папок в Python.

Введение

Tempfile — это модуль из стандартной библиотеки, используемый для создания временных файлов и каталогов. Такие файлы очень удобны, когда мы не хотим хранить данные постоянно. Если мы работаем с массивными данными, то эти файлы создаются с уникальными именами и хранятся в месте по умолчанию, варьирующемся от вашей операционной системы. Например, в Windows папка temp находится в каталоге %ИМЯПОЛЬЗОВАТЕЛЯ%/AppData/Local/Temp, в то время как в иных системах папка временных файлов находится в других местах.

Создание временного файла

import tempfile

file_temp = tempfile.TemporaryFile()
print(file_temp)
print(file_temp.name)

Вывод программы

<_io.BufferedRandom name=4>
4

Здесь мы видим, как создать временный файл с помощью функции tempfile(). Сначала мы импортировали модуль tempfile, после чего определили переменную и использовали нашу функцию для создания временного файла. После чего мы использовали оператор print 2 раза. Первый, чтобы получить объект нашего файла, а второй, чтобы получить точное имя файла. Имя файла генерируется случайным образом и может варьироваться от пользователя к пользователю.

Создание именованного временного файла

import tempfile

file_temp = tempfile.NamedTemporaryFile()
print(file_temp)
print(file_temp.name)

Вывод программы

tempfile._TemporaryFileWrapper object at 0x7f8f439eefa0>
/var/folders/22/lrkx415953qbgh17tfbdhbvw0000gn/T/tmp5hef4sd5

Здесь мы создали именованный временный файл.

Разница, которая вполне очевидна, заключается в том, что вместо метода TemporaryFile() мы использовали NamedTemporaryFile().

В этом методе генерируется случайное имя для временного файла. Так же этот файл по умолчанию храниться в директории временных файлов вашей операционной системы.

Создание временного каталога

import tempfile

dir_temp = tempfile.TemporaryDirectory()
print(dir_temp)

Вывод программы

<TemporaryDirectory '/var/folders/22/lrkx415953qbgh17tfbdhbvw0000gn/T/tmpxb_irujq'>

Здесь мы создали каталог. Как мы видим, синтаксис изменился всего на один вызов по сравнению с тем, что мы использовали для создания временного файла. Здесь вместо метода TemporaryFile() мы использовали TemporaryDirectory().

Чтение и запись во временный файл

import tempfile

file_tmp = tempfile.TemporaryFile()
file_tmp.write(b"Testing write and read file")
file_tmp.seek(0)
print(file_tmp.read())
file_tmp.close()

Вывод программы

b'Testing write and read file'

Выше мы видим, как читать и записывать во временные файлы. Здесь мы впервые создали временный файл. После чего мы использовали функцию записи, которая используется для записи данных во временный файл. Наверное, вам интересно, что там делает ‘b’. Дело в том, что по умолчанию временные файлы берут на вход данные, и ‘b’ преобразует строку в двоичный файл.

Далее вызывается функция поиска, которая устанавливает указатель в файле на его начало. Затем мы использовали функцию чтения, которая читает содержимое временного файла.

Альтернативный способ с использованием mkstemp

Функция tempfile() великолепна, но в этом разделе мы рассмотрим одну из альтернатив. mkstemp() — это функция, которая делает все то же самое, но в дополнение к этому, она обеспечивает безопасность.

Только пользователь, создавший временный файл, может добавлять в него данные. Кроме того, этот файл автоматически не удаляется при закрытии.

import tempfile

file_tmp = tempfile.mkstemp()
print(file_tmp)

Вывод программы

(4, '/var/folders/22/lrkx415953qbgh17tfbdhbvw0000gn/T/tmp32fn1fjh')

Здесь мы создали временный файл с помощью метода mkstemp(). Изменений относительно предыдущего примера минимально, вместо TemporaryFile() мы использовали mkstemp(), а все остальное осталось прежним.

Заключение

Сегодня мы рассмотрели как используется и для чего нужна библиотека tempfile в Python. Если у вас есть дополнительные вопросы, не стесняйтесь задавать их в комментариях.

Егор Егоров

Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий