Open tmp file python

Модуль Tempfile в Python

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

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

Все эти шаги очень легко выполняются с помощью модуля tempfile в Python. Он предоставляет простые функции, с помощью которых мы можем создавать временные файлы и каталоги, а также легко получать к ним доступ. Давайте посмотрим здесь на этот модуль в действии.

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

Когда нам нужно создать временный файл для хранения данных, нам нужна функция TemporaryFile(). Преимущество этой функции заключается в том, что когда она создает новый файл, в файловой системе платформы нет ссылок на файл, и поэтому другие программы не могут получить доступ к этим файлам.

Вот пример программы в Python, которая создает временный файл и очищает его при закрытии TemporaryFile:

import os import tempfile # Using PID in filename filename = '/tmp/journaldev.%s.txt' % os.getpid() # File mode is read write temp = open(filename, 'w+b') try: print('temp: '.format(temp)) print('temp.name: '.format(temp.name)) finally: temp.close() # Clean up the temporary file yourself os.remove(filename) print('TemporaryFile:') temp = tempfile.TemporaryFile() try: print('temp: '.format(temp)) print('temp.name: '.format(temp.name)) finally: # Automatically cleans up the file temp.close()

Посмотрим на результат этой программы:

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

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

Читайте также:  Конвертер валют api python

Запустив эту программу, вы увидите, что в файловой системе вашего компьютера нет файлов.

Чтение из временного файла

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

Давайте посмотрим на фрагмент кода, чтобы продемонстрировать это:

import os import tempfile temp_file = tempfile.TemporaryFile() try: print('Writing data:') temp_file.write(b'This is temporary data.') temp_file.seek(0) print('Reading data: \n\t'.format(temp_file.read())) finally: temp_file.close()

Посмотрим на результат этой программы:

Чтение временного файла

Нам нужно было только вызвать функцию read() для объекта TemporaryFile(), и мы смогли получить обратно все данные из временного файла. Наконец, обратите внимание, что мы записали в этот файл только байтовые данные. В следующем примере мы запишем в него данные в виде обычного текста.

Запись простого текста во временный файл

С небольшими изменениями в последней написанной нами программе мы также можем записывать простые текстовые данные во временный файл:

import tempfile file_mode = 'w+t' with tempfile.TemporaryFile(mode=file_mode) as file: file.writelines(['Java\n', 'Python\n']) file.seek(0) for line in file: print(line.rstrip())

Посмотрим на результат этой программы:

Запись простого текста во временный файл

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

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

Давайте посмотрим на фрагмент кода, который использует функцию NamedTemporaryFile() для создания именованного временного файла:

import os import tempfile temp_file = tempfile.NamedTemporaryFile() try: print('temp_file : '.format(temp_file)) print('temp.temp_file : '.format(temp_file.name)) finally: # Automatically deletes the file temp_file.close() print('Does exists? : '.format(os.path.exists(temp_file.name)))

Посмотрим на результат этой программы:

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

Предоставление суффикса и префикса имени файла

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

Читайте также:  Css positioning top center

Вот пример программы, которая предоставляет префикс и суффикс в имена файлов:

import tempfile temp_file = tempfile.NamedTemporaryFile(suffix='_temp', prefix='jd_', dir='/tmp',) try: print('temp:', temp_file) print('temp.name:', temp_file.name) finally: temp_file.close()

Посмотрим на результат этой программы:

Временный файл с префиксом и суффиксом

Заключение

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

Источник

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

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

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

Введение

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

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

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

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

Здесь мы видим, как создать временный файл с помощью функции 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().

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

Читайте также:  Как получить ответ от сервера php

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

import tempfile dir_temp = tempfile.TemporaryDirectory() print(dir_temp)

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

Здесь мы создали каталог. Как мы видим, синтаксис изменился всего на один вызов по сравнению с тем, что мы использовали для создания временного файла. Здесь вместо метода 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 есть в шапке. Залетай.

Источник

Оцените статью