Как я могу создать файл TMP в Python?

У меня есть эта функция, которая ссылается на путь к файлу:

some_obj.file_name(FILE_PATH)

где FILE_PATH - строка пути к файлу, т.е. H: /path/FILE_NAME.ext

Я хочу создать файл FILE_NAME.ext внутри моего скрипта Python с содержимым строки:

some_string = 'this is some content'

Как это сделать? Скрипт Python будет помещен в коробку Linux.

Ответ 1

Для python есть модуль tempfile, но простое создание файла тоже помогает:

new_file = open("path/to/FILE_NAME.ext", "w")

Теперь вы можете написать в него, используя метод write:

new_file.write('this is some content')

С модулем tempfile это может выглядеть так:

import tempfile

new_file, filename = tempfile.mkstemp()

print(filename)

os.write(new_file, "this is some content")
os.close(new_file)

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


ОБНОВИТЬ

Как справедливо mkstemp Эммет Спир, при использовании mkstemp существуют соображения безопасности, поскольку клиентский код отвечает за закрытие/очистку созданного файла. Лучший способ справиться с этим - следующий фрагмент (взятый из ссылки):

import os
import tempfile

fd, path = tempfile.mkstemp()
try:
    with os.fdopen(fd, 'w') as tmp:
        # do stuff with temp file
        tmp.write('stuff')
finally:
    os.remove(path)

os.fdopen оборачивает дескриптор файла в объект файла Python, который автоматически закрывается при выходе из команды with. Вызов os.remove удаляет файл, когда он больше не нужен.

Ответ 2

Я думаю, что вы ищете это: http://docs.python.org/library/tempfile.html

import tempfile
with tempfile.NamedTemporaryFile() as tmp:
    print(tmp.name)
    tmp.write(...)

Но:

Возможность использования имени для открытия файла во второй раз, когда именованный временный файл все еще открыт, зависит от платформы (его можно использовать в Unix; в Windows NT или более поздней версии это невозможно).

Если это беспокоит вас:

import os, tempfile
tmp = tempfile.NamedTemporaryFile(delete=False)
try:
    print(tmp.name)
    tmp.write(...)
finally:
    os.unlink(tmp.name)
    tmp.close()