2013-08-16 3 views
3

В питона вы можете создать временный файл следующим образом:Где python tempfile записывает свои файлы?

tempfile.TemporaryFile() 

И тогда вы можете написать к нему. Где файл, написанный в системе GNU/Linux? Я не могу найти его в каталоге/tmp или в любом другом каталоге.

Спасибо,

+3

["В разделе Unix запись в каталоге для файла удаляется сразу после создания файла."] (http://docs.python.org/2 /library/tempfile.html#tempfile.TemporaryFile). Осторожнее. – user2357112

+0

Когда я пытаюсь: mytempfile.name Я получаю: \t «» –

ответ

4

Глядя .name на дескриптор файла, действительно один из способов, чтобы увидеть, где файл существует. В случае TemporaryFile (в системах * NIX) вы увидите <fdopen>, указав дескриптор открытого файла, но не соответствующую запись в каталоге. Вам нужно будет использовать NamedTemporaryFile, если вы хотите сохранить ссылку на основной файл.


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

TemporaryFile использует mkstemp, который позволяет установить каталог с параметром dir:

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

+0

Имя файла возвращает «». Имеет ли это смысл? –

+2

Да, да. 'TemporaryFile' просто имеет дело с OS [файловым дескриптором] (https://en.wikipedia.org/wiki/File_descriptor), поэтому нет доступного имени файла. Если вам нужен файл с доступным путем, используйте ['NamedTemporaryFile'] (http://docs.python.org/2/library/tempfile.html#tempfile.NamedTemporaryFile). Чтение документации для ['mkstemp'] (http://docs.python.org/2/library/tempfile.html#tempfile.mkstemp), мы надеемся, пролило бы свет на это и облегчит любую путаницу. –

+2

@Loic: Это означает, что это дескриптор открытого файла, и основной файл уже был отсоединен. Используйте 'tempfile.NamedTemporaryFile()', если вам нужно имя файла. –

7

Вызовите tempfile.gettempdir() function:.

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

Вы можете изменить, где создаются временные файлы, установив tempfile.tempdir value в другой каталог, если вам хотите повлиять на создание временных файлов. Цитирование из документации, если это значение None правила заключаются в следующем:

Если 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. В крайнем случае, текущий рабочий каталог.
1

на оболочке попробовать это

$python 
>>> import tempfile 
    >>>tempfile.gettempdir() 

'/var/folders/5r/lxh8g5ln7zg43_l_3t0j7b1c0000gn/T' 

Это покажет вам реальный путь временный питон используя.

Вы можете попробовать это. (это приведет к тому же результату, что и выше)

$python 
>>> import tempfile 
    >>>tempfile.tempdir 
'/var/folders/5r/lxh8g5ln7zg43_l_3t0j7b1c0000gn/T' 
+2

'tempfile.tempdir' устанавливается при вызове' tempfile.gettempdir() '; 'temfile.tempdir' начнет« Нет ». –

Смежные вопросы