【问题标题】:Where does python tempfile writes its files?python tempfile 在哪里写它的文件?
【发布时间】:2023-03-13 16:39:01
【问题描述】:

在python中你可以创建一个临时文件如下:

tempfile.TemporaryFile()

然后你就可以给它写信了。在 GNU/Linux 系统中写入的文件在哪里?我似乎在 /tmp 目录或任何其他目录中找不到它。

谢谢,

【问题讨论】:

标签: python linux temporary-files


【解决方案1】:

拨打tempfile.gettempdir() function

返回当前选择的创建临时文件的目录。

如果您想影响临时文件的创建位置,您可以通过将tempfile.tempdir value 设置为不同的目录来更改临时文件的创建位置。从文档中引用,如果该值为None,则规则如下:

如果在对上述任何函数的任何调用中未设置 tempdir 或 None,Python 将搜索标准目录列表并将 tempdir 设置为调用用户可以在其中创建文件的第一个。列表是:

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

【讨论】:

    【解决方案2】:

    查看文件句柄上的.name 确实是查看文件存在位置的一种方法。对于TemporaryFile(在*NIX 系统上),您将看到<fdopen>,表示打开的文件句柄,但没有相应的目录条目。如果您想保留指向基础文件的链接,则需要使用 NamedTemporaryFile


    如果您希望控制临时文件的去向,请查看dir 参数:

    TemporaryFile 使用mkstemp,它允许使用dir 参数设置目录:

    如果指定dir,文件将在该目录中创建;否则,使用默认目录。默认目录是从与平台相关的列表中选择的,但应用程序的用户可以通过设置TMPDIRTEMPTMP 环境变量来控制目录位置。

    【讨论】:

    • 文件名返回“”。有意义吗?
    • 是的,确实如此。 TemporaryFile 只处理操作系统file descriptor,因此没有可访问的文件名。如果您想要一个具有可访问路径的文件,请使用NamedTemporaryFile。阅读mkstemp 的文档有望对此有所了解并消除任何混淆。
    • @Loic:表示它是一个打开的文件句柄,并且底层文件已经被取消链接。如果需要文件名,请使用 tempfile.NamedTemporaryFile()
    • @Loic:在 POSIX 系统上,您可以在仍有文件句柄的情况下取消链接文件。您的进程可以读取和写入文件,但没有其他进程可以访问它,因为目录条目已被删除。
    • @Loic:这是一个非常理想的功能,使您的临时文件成为存储其他进程不应读取的信息的安全位置,更不用说写入了。
    【解决方案3】:

    在shell上试试这个

        $python
    >>> import tempfile
        >>>tempfile.gettempdir()
    
    '/var/folders/5r/lxh8g5ln7zg43_l_3t0j7b1c0000gn/T'
    

    这将显示 python 使用的实际临时路径。

    您可以选择试试这个。 (这将产生与上述相同的结果)

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

    【讨论】:

    • tempfile.tempdir 在您调用tempfile.gettempdir() 时设置; temfile.tempdir 将从 None 开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多