Spec-Zone.ru › Python 2.7

tempfile — Генерация временных файлов и каталогов

Исходный код: Lib/tempfile.py

Этот модуль генерирует временные файлы и каталоги. Он работает на всех поддерживаемых платформах.

В версии 2.3 Python этот модуль был переработан для повышения безопасности. Теперь он предоставляет три новые функции, NamedTemporaryFile(), mkstemp() и mkdtemp(), которые должны устранить все оставшиеся потребности в использовании небезопасной функции mktemp(). Имена временных файлов, созданных этим модулем, больше не содержат идентификатор процесса; вместо этого используется строка из шести случайных символов.

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

Модуль определяет следующие вызываемые пользователем функции:

tempfile.TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]])

Возвращает файлоподобный объект, который можно использовать в качестве временного хранилища. Файл создается с помощью mkstemp(). Он будет уничтожен как только будет закрыт (включая неявное закрытие при сборке мусора объекта). В Unix, запись каталога для файла удаляется сразу после создания файла. Другие платформы не поддерживают это; ваш код не должен полагаться на то, что временный файл, созданный с помощью этой функции, имеет или не имеет видимого имени в файловой системе.

Параметр mode по умолчанию равен 'w+b' , чтобы созданный файл можно было читать и записывать без закрытия. Используется двоичный режим, чтобы он работал согласованно на всех платформах независимо от хранимых данных. bufsize по умолчанию равен -1, что означает использование значения по умолчанию операционной системы.

Параметры dir, prefix и suffix передаются функции mkstemp().

Возвращаемый объект — это настоящий файловый объект на платформах POSIX. На других платформах это файлоподобный объект, чье атрибут file является базовым истинным файловым объектом. Этот файлоподобный объект может использоваться в операторе with, как и обычный файл.

tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])

Эта функция работает точно так же, как и TemporaryFile(), за исключением того, что файл гарантированно имеет видимое имя в файловой системе (в Unix запись каталога не удаляется). Это имя можно получить из атрибута name возвращаемого файлоподобного объекта. Возможность использования имени для повторного открытия файла, в то время как именованный временный файл все еще открыт, зависит от платформы (в Unix это возможно; в Windows NT и более поздних версиях — нет). Если delete равно true (по умолчанию), файл удаляется сразу после закрытия.

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

Добавлена в версии 2.3.

Добавлена в версии 2.6: параметр delete.

tempfile.SpooledTemporaryFile([max_size=0[, mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]]])

Эта функция работает точно так же, как TemporaryFile(), за исключением того, что данные буферизуются в памяти до тех пор, пока размер файла не превысит max_size или пока не будет вызван метод fileno() файла, в этом случае содержимое записывается на диск и выполняется работа как с TemporaryFile(). Также, его метод truncate не принимает аргумент size.

Полученный файл имеет дополнительный метод rollover(), который переносит файл на диск независимо от его размера.

Возвращаемый объект является файлоподобным объектом, чье атрибут _file является либо объектом StringIO, либо истинным файловым объектом, в зависимости от того, был ли вызван метод rollover(). Этот файлоподобный объект может использоваться в операторе with, как и обычный файл.

Добавлена в версии 2.6.

tempfile.mkstemp([suffix=''[, prefix='tmp'[, dir=None[, text=False]]]])

Создает временный файл наиболее безопасным способом. Нет проблем с конкурентным доступом при создании файла, предполагая, что платформа правильно реализует флаг os.O_EXCL для функции os.open(). Файл доступен только для чтения и записи пользователем, создавшим его. Если платформа использует биты разрешений для указания того, является ли файл исполняемым, то он не исполняем никем. Дескриптор файла не наследуется дочерними процессами.

В отличие от TemporaryFile(), пользователь mkstemp() несет ответственность за удаление временного файла по окончании работы с ним.

Если указан suffix, имя файла будет заканчиваться этим суффиксом, в противном случае суффикса не будет. mkstemp() не ставит точку между именем файла и суффиксом; если вам нужна точка, поместите её в начале suffix.

Если указан prefix, имя файла будет начинаться с этого префикса; в противном случае используется префикс по умолчанию.

Если указан dir, файл будет создан в этой директории; в противном случае используется директория по умолчанию. Директория по умолчанию выбирается из платформозависимого списка, но пользователь приложения может управлять расположением директории, установив переменные окружения TMPDIR, TEMP или TMP. Таким образом, нет гарантии, что сгенерированное имя файла будет обладать каким-либо хорошими свойствами, такими как не требование экранирования при передаче во внешние команды через os.popen().

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

mkstemp() возвращает кортеж, содержащий дескриптор файла на уровне ОС (как возвращает os.open()) и абсолютный путь к этому файлу в указанном порядке.

Добавлена в версии 2.3.

tempfile.mkdtemp([suffix=''[, prefix='tmp'[, dir=None]]])

Создает временную директорию максимально безопасным способом. Нет проблем с конкурентным доступом при создании директории. Директория доступна только для чтения, записи и поиска создавшим её пользователем.

Пользователь mkdtemp() несет ответственность за удаление временной директории и её содержимого по окончании работы с ней.

Аргументы prefix, suffix и dir аналогичны аргументам для mkstemp().

mkdtemp() возвращает абсолютный путь к новой директории.

Добавлена в версии 2.3.

tempfile.mktemp([suffix=''[, prefix='tmp'[, dir=None]]])

Устарело начиная с версии 2.3: Используйте mkstemp() вместо этого.

Возвращает абсолютный путь к файлу, который не существовал в момент вызова. Аргументы prefix, suffix и dir аналогичны аргументам для mkstemp().

Предупреждение

Использование этой функции может привести к уязвимости безопасности в вашей программе. К моменту, когда вы выполните какие-либо действия с именем файла, возвращённым ею, кто-то другой может успеть создать файл с тем же именем. Использование mktemp() легко заменяется на использование NamedTemporaryFile(), передавая ему параметр delete=False.

>>> f = NamedTemporaryFile(delete=False)
>>> f
<open file '<fdopen>', mode 'w+b' at 0x384698>
>>> f.name
'/var/folders/5q/5qTPn6xq2RaWqk+1Ytw3-U+++TI/-Tmp-/tmpG7V1Y0'
>>> f.write("Hello World!\n")
>>> f.close()
>>> os.unlink(f.name)
>>> os.path.exists(f.name)
False

Модуль использует глобальную переменную, которая определяет, как строить временное имя. Они инициализируются при первом вызове любой из функций выше. Пользователь может изменить их, но это не рекомендуется; вместо этого используйте соответствующие аргументы функций.

tempfile.tempdir

При значении, отличном от None, эта переменная определяет значение по умолчанию для аргумента dir всех функций, определённых в этом модуле.

Если tempdir не задано или None при любом вызове любой из вышеперечисленных функций, Python ищет в стандартном списке каталогов и устанавливает tempdir в первый, в котором вызывающий пользователь может создавать файлы. Список:

  1. Каталог, указанный переменной среды TMPDIR.
  2. Каталог, указанный переменной среды TEMP.
  3. Каталог, указанный переменной среды TMP.
  4. Платформозависимое расположение:

    • В RiscOS, каталог, указанный переменной среды Wimp$ScrapDir.
    • В Windows, каталоги C:\TEMP, C:\TMP, \TEMP, и \TMP, в указанном порядке.
    • На всех остальных платформах, каталоги /tmp, /var/tmp, и /usr/tmp, в указанном порядке.
  5. В качестве последней меры, текущий рабочий каталог.
tempfile.gettempdir()

Возвращает каталог, в настоящее время выбранный для создания временных файлов. Если tempdir не None, это просто возвращает его содержимое; в противном случае выполняется описанный выше поиск, и результат возвращается.

Добавлена в версии 2.3.

tempfile.template

Устарело начиная с версии 2.0: Используйте gettempprefix() вместо этого.

При значении, отличном от None, эта переменная определяет префикс конечной компоненты имён файлов, возвращаемых функцией mktemp(). К префиксу добавляется строка из шести случайных букв и цифр, чтобы сделать имя файла уникальным. Префикс по умолчанию — tmp.

Старые версии этого модуля требовали, чтобы template было установлено в None после вызова os.fork(); с версии 1.5.2 это уже не необходимо.

tempfile.gettempprefix()

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

Добавлена в версии 1.5.2.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/tempfile.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API