Что такое tmp в python
Перейти к содержимому

Что такое tmp в python

  • автор:

Модуль tempfile в Python, временные файлы и каталоги

Создание защищенных временных файлов и каталогов для программы

Модуль tempfile создает временные файлы и каталоги. Работает на всех поддерживаемых платформах. Модуль определяет несколько конструкторов высокого уровня, которые обеспечивают автоматическую очистку и могут использоваться в качестве менеджеров контекста. Функции tempfile.mkstemp() и tempfile.mkdtemp() являются функциями более низкого уровня, которые требуют ручной очистки.

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

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

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

Примеры:

Вот несколько примеров типичного использования модуля tempfile :

>>> import tempfile # Создать временный файл и # записать в него некоторые данные >>> fp = tempfile.TemporaryFile() >>> fp.write(b'Hello world!') # Читать данные из файла >>> fp.seek(0) >>> fp.read() # b'Hello world!' # Закройте файл, он будет удален >>> fp.close() 

Создать временный файл, используя менеджер контекста

>>> with tempfile.TemporaryFile() as fp: . fp.write(b'Hello world!') . fp.seek(0) . fp.read() # b'Hello world!' >>> # Файл закрыт и удален 

Создать временный каталог с помощью диспетчера контекста

>>> with tempfile.TemporaryDirectory() as tmpdirname: . print('created temporary directory', tmpdirname) >>> # Каталог и содержимое были удалены 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Класс TemporaryFile() модуля tempfile
  • Функция NamedTemporaryFile() модуля tempfile
  • Функция SpooledTemporaryFile() модуля tempfile
  • Функция TemporaryDirectory() модуля tempfile
  • Функция mkstemp() модуля tempfile
  • Функция mkdtemp() модуля tempfile
  • Вспомогательные функции модуля tempfile

Вспомогательные функции модуля tempfile

Функция tempfile.gettempdir() возвращает имя каталога как строку, используемого для временных файлах. Это определяет значение по умолчанию для аргумента dir для всех функций в этом модуле.

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

  • Каталог, переменной среды TMPDIR.
  • Каталог, переменной среды TEMP.
  • Каталог, переменной среды TMP.
  • Местоположение для конкретной платформы:
    • В Windows каталоги C:\TEMP, C:\TMP, \TEMP и \TMP в указанном порядке.
    • На всех других платформах каталоги /tmp, /var/tmp и /usr/tmpв указанном порядке.

    Результат этого поиска кэшируется, смотрите описание tempfile.tempdir .

    >>> import tempfile >>> tempfile.gettempdir() # '/tmp' 
    tempfile.gettempdirb() :

    Метод tempfile.gettempdirb() то же, что tempfile.gettempdir() , но только возвращаемое значение в байтах.

    >>> import tempfile >>> tempfile.gettempdirb() # b'/tmp' 
    tempfile.gettempprefix() :

    Метод tempfile.gettempprefix() возвращает префикс имени файла как строку, используемый для создания временных файлов. Значение не содержит компонент каталога.

    >>> import tempfile >>> tempfile.gettempprefix() # 'tmp' 
    tempfile.gettempprefixb() :

    Метод tempfile.gettempprefixb() то же, что tempfile.gettempprefix() , но только возвращаемое значение в байтах.

    >>> import tempfile >>> tempfile.gettempprefixb() # b'tmp' 
    tempfile.tempdir :

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

    >>> import tempfile >>> tempfile.tempdir # '/tmp' 

    Если tempdir=None (по умолчанию) при любом вызове любой из вышеперечисленных функций, кроме tempfile.gettempprefix() , он инициализируется в соответствии с алгоритмом, описанным в tempfile.gettempdir() .

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

    • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
    • Класс TemporaryFile() модуля tempfile
    • Функция NamedTemporaryFile() модуля tempfile
    • Функция SpooledTemporaryFile() модуля tempfile
    • Функция TemporaryDirectory() модуля tempfile
    • Функция mkstemp() модуля tempfile
    • Функция mkdtemp() модуля tempfile
    • Вспомогательные функции модуля tempfile

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

    Модуль создает временные файлы и каталоги. Он работает на всех поддерживаемых платформах. TemporaryFile , NamedTemporaryFile , TemporaryDirectory и SpooledTemporaryFile — это высокоуровневые интерфейсы, которые обеспечивают автоматическую очистку и могут быть используемый в качестве менеджеров контекст. mkstemp() и mkdtemp() — это низкоуровневые функции, требующие ручной очистки.

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

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

    tempfile. TemporaryFile ( mode=’w+b’, buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None ) ¶

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

    Результирующий объект можно используемый как диспетчер контекст (см. Примеры ). По завершении контекст или уничтожения объекта файла временный файл будет удален из файловой системы.

    Параметр mode по умолчанию имеет значение ‘w+b’ , чтобы созданный файл можно было прочитать и записать без закрытия. Бинарный режим используемый так, чтобы вести себя последовательно на всех платформах без учета хранимых данных. buffering, encoding, errors и newline интерпретируются как open() .

    Параметры dir, prefix и suffix имеют то же значение и значения по умолчанию, что и для mkstemp() .

    Объект возвращенный является истинным файловым объектом на платформах POSIX. На других платформах это файлообразный объект, file атрибут которого является базовым истинным файловым объектом.

    Флаг os.O_TMPFILE используемый, если он доступен и работает (для Linux требуется ядро Linux 3.11 или более поздней версии).

    Raises an auditing event tempfile.mkstemp with argument fullpath .

    Изменено в версии 3.5: Теперь используется флаг os.O_TMPFILE , если доступен.

    Изменено в версии 3.8: Добавлен errors параметр.

    tempfile. NamedTemporaryFile ( mode=’w+b’, buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True, *, errors=None ) ¶

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

    Raises an auditing event tempfile.mkstemp with argument fullpath .

    Изменено в версии 3.8: Добавлен параметр errors.

    tempfile. SpooledTemporaryFile ( max_size=0, mode=’w+b’, buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None ) ¶

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

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

    Объект возвращенный — это файлообразный объект, _file атрибут которого является либо объектом io.BytesIO , либо объектом io.TextIOWrapper (в зависимости от того, был ли указан двоичный или текстовый mode), либо объектом true, в зависимости от того, был ли вызван rollover() . Этот файлообразный объект можно используемый в with инструкция, как и обычный файл.

    Изменено в версии 3.3: метод усечения теперь принимает аргумент size .

    Изменено в версии 3.8: Добавлен errors параметр.

    tempfile. TemporaryDirectory ( suffix=None, prefix=None, dir=None ) ¶

    Функция надежно создает временный каталог, используя те же правила, что и mkdtemp() . Полученный объект можно используемый в качестве менеджера контекст (см. Примеры ). По завершении контекст или уничтожения объекта временного каталога вновь созданный временный каталог и все его содержимое удаляются из файловой системы.

    Имя каталога можно получить из name атрибут объекта возвращенный. Когда объект возвращенный будет используемый как менеджером контекст, name будет назначен на цель as клаузула в with инструкция, если будет тот.

    Каталог можно явно очистить, вызвав метод cleanup() .

    Raises an auditing event tempfile.mkdtemp with argument fullpath .

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

    tempfile. mkstemp ( suffix=None, prefix=None, dir=None, text=False ) ¶

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

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

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

    Если prefix не None , имя файла будет начинаться с этого префикса; в противном случае префикс по умолчанию будет используемый. По умолчанию используется значение возвращает значение gettempprefix() или gettempprefixb() .

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

    Если какие-либо из suffix, prefix и dir не являются None , они должны быть одного типа. Если это байты, возвращенный имя будет байтами вместо строки. Если требуется принудительно ввести байты возвращает значение с другим поведением по умолчанию, передайте suffix=b» .

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

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

    Raises an auditing event tempfile.mkstemp with argument fullpath .

    Изменено в версии 3.5: suffix, prefix и dir теперь могут подаваться в байтах для получения байтов возвращает значение. До этого разрешалась только стр. suffix и prefix теперь принять и по умолчанию None , чтобы вызвать значение соответствующего используемый по умолчанию.

    Изменено в версии 3.6: Теперь параметр dir принимает путеподобный объект .

    tempfile. mkdtemp ( suffix=None, prefix=None, dir=None ) ¶

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

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

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

    mkdtemp() возвращает абсолютное имя пути нового каталога.

    Raises an auditing event tempfile.mkdtemp with argument fullpath .

    Изменено в версии 3.5: suffix, prefix и dir теперь могут подаваться в байтах для получения байтов возвращает значение. До этого разрешалась только стр. suffix и prefix теперь принять и по умолчанию None , чтобы вызвать значение соответствующего используемый по умолчанию.

    Изменено в версии 3.6: Теперь параметр dir принимает путеподобный объект .

    tempfile. gettempdir ( ) ¶

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

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

    1. Каталог, именованный переменной среды TMPDIR .
    2. Каталог, именованный переменной среды TEMP .
    3. Каталог, именованный переменной среды TMP .
    4. Местоположение для конкретной платформы:
      • В Windows каталоги C:\TEMP , C:\TMP , \TEMP и \TMP в таком порядке.
      • На всех остальных платформах каталоги /tmp , /var/tmp и /usr/tmp в таком порядке.
    5. В крайнем случае, текущий рабочий каталог.

    Результат этого поиска кэшируется, см. описание tempdir ниже.

    То же самое, что и gettempdir() , но возвращает значение в байтах.

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

    tempfile. gettempprefix ( ) ¶

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

    То же самое, что и gettempprefix() , но возвращает значение в байтах.

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

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

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

    Если tempdir является None (по умолчанию) при любом вызове любой из вышеперечисленных функций, за исключением того, gettempprefix() он инициализируется в соответствии с алгоритмом, описанным в gettempdir() .

    Примеры¶

    Ниже приведены некоторые примеры типичного использования модуля tempfile :

    >>> import tempfile # создать временный файл и записать в него некоторые данные >>> fp = tempfile.TemporaryFile() >>> fp.write(b'Hello world!') # читать данные из файла >>> fp.seek(0) >>> fp.read() b'Hello world!' # закрыть файл, он будет удален >>> fp.close() # создать временный файл, используя менеджер контекста >>> with tempfile.TemporaryFile() as fp: . fp.write(b'Hello world!') . fp.seek(0) . fp.read() b'Hello world!' >>> # файл закрыт и удален # создать временный каталог с помощью менеджера контекста >>> with tempfile.TemporaryDirectory() as tmpdirname: . print('created temporary directory', tmpdirname) >>> # каталог и содержимое были удалены 

    Устаревшие функции и переменные¶

    Историческим способом создания временных файлов было сначала создание имени файла с помощью функции mktemp() , а затем создание файла с использованием этого имени. К сожалению, это не безопасно, поскольку другой процесс может создать файл с таким именем в период между вызовом mktemp() и последующей попыткой создать файл первым процессом. Решение состоит в объединении этих двух шагов и немедленном создании файла. Этот подход используемый mkstemp() и другие функции, описанные выше.

    Не рекомендуется, начиная с версии 2.3: Вместо этого используйте mkstemp() .

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

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

    >>> f = NamedTemporaryFile(delete=False) >>> f.name '/tmp/tmptjujjt' >>> f.write(b"Hello World!\n") 13 >>> f.close() >>> os.unlink(f.name) >>> os.path.exists(f.name) False 

    Что такое tmp в python

    Интересные встроенные библиотеки питона:

    Создаёт временный файл как в linux папка tmp:

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

    Чтобы не использовать временные файлы, можно использовать временный буфер сразу в программе:

    from io import BytesIO imagefile = BytesIO() animage.save(imagefile, format='PNG') imagedata = imagefile.getvalue()

    Позволяет создавать бинарные структуры и парсить их. Может ускорить передачу между клиентом и сервером:

    >> from struct import * >> pack(">bhl", 1, 2, 3) b'\x01\x00\x02\x00\x00\x00\x03' >> unpack('>bhl', b'\x01\x00\x02\x00\x00\x00\x03') (1, 2, 3) >> calcsize('>bhl') 7

    С помощью этой библиотеки можно создать полноценный tui:

    Welcome to the turtle shell. Type help or ? to list commands. (turtle) ? Documented commands (type help ): ======================================== bye color goto home playback record right circle forward heading left position reset undo (turtle) help forward Move the turtle forward by the specified distance: FORWARD 10 (turtle) record spiral.cmd (turtle) position Current position is 0 0

    Удивительно что такие полезные пакеты находятся в стандартной комплектации питона.

    И не нужно скачивать кучу пакетов из pip.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *