320

temp在 Python 2.6 中 是否有跨平台获取目录路径的方法?

例如,在 Linux 下将是/tmp,而在 XP 下C:\Documents and settings\[user]\Application settings\Temp

4

5 回答 5

462

那将是tempfile模块。

它具有获取临时目录的功能,并且还具有一些快捷方式来在其中创建临时文件和目录,无论是命名的还是未命名的。

例子:

import tempfile

print tempfile.gettempdir() # prints the current temporary directory

f = tempfile.TemporaryFile()
f.write('something on temporaryfile')
f.seek(0) # return to beginning of file
print f.read() # reads data back from the file
f.close() # temporary file is automatically deleted here

为了完整起见,根据文档,这是它搜索临时目录的方式:

  1. TMPDIR由环境变量命名的目录。
  2. TEMP由环境变量命名的目录。
  3. TMP由环境变量命名的目录。
  4. 特定于平台的位置:
    • RiscOS 上Wimp$ScrapDir,由环境变量命名的目录。
    • Windows上,目录C:\TEMPC:\TMP\TEMP\TMP, 按此顺序排列。
    • 在所有其他平台上,目录/tmp/var/tmp/usr/tmp, 按此顺序排列。
  5. 作为最后的手段,当前工作目录。
于 2009-05-11T12:25:18.337 回答
72

这应该做你想要的:

print tempfile.gettempdir()

对我来说,在我的 Windows 机器上,我得到:

c:\temp

在我的 Linux 机器上,我得到:

/tmp
于 2009-05-11T12:27:30.877 回答
24

我用:

from pathlib import Path
import platform
import tempfile

tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())

这是因为在 MacOS 上,即 Darwin,tempfile.gettempdir()os.getenv('TMPDIR')返回一个值,例如'/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; 这是我并不总是想要的。

于 2017-04-14T19:51:37.737 回答
17

最简单的方法,基于@nosklo 的评论和回答

import tempfile
tmp = tempfile.mkdtemp()

但是如果你想手动控制目录的创建:

import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)

这样,您可以在完成后轻松清理(为了隐私、资源、安全等):

from shutil import rmtree
rmtree(tmp, ignore_errors=True)

这类似于 Google Chrome 和 Linux 等应用程序systemd所做的事情。他们只是使用较短的十六进制哈希和特定于应用程序的前缀来“宣传”他们的存在。

于 2016-05-10T20:04:20.727 回答
-6

为什么会有这么多复杂的答案?

我只是用这个

   (os.getenv("TEMP") if os.name=="nt" else "/tmp") + os.path.sep + "tempfilename.tmp"
于 2021-03-08T10:20:18.287 回答