如何在 Python 中创建 tmp 文件?

Posted

技术标签:

【中文标题】如何在 Python 中创建 tmp 文件?【英文标题】:How can I create a tmp file in Python? 【发布时间】:2012-01-24 12:23:27 【问题描述】:

我有这个引用文件路径的函数:

some_obj.file_name(FILE_PATH)

其中 FILE_PATH 是文件路径的字符串,即H:/path/FILE_NAME.ext

我想在我的 python 脚本中创建一个包含字符串内容的文件 FILE_NAME.ext:

some_string = 'this is some content'

如何解决这个问题? Python 脚本将被放置在 Linux 盒子中。

【问题讨论】:

用'w'打开然后关闭,使用os.touch(fname) 那你为什么需要临时文件呢? 我有一个调用对象的 FILE_PATH 的函数,所以它需要在那里 @SuperString 你能改变接受的答案吗? 【参考方案1】:

我想你正在寻找这个:http://docs.python.org/library/tempfile.html

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

但是:

在命名的临时文件仍处于打开状态时,该名称是否可用于第二次打开文件,因平台而异(在 Unix 上可以这样使用;在 Windows NT 或更高版本上不能)。

如果您对此感到担忧:

import os, tempfile
tmp = tempfile.NamedTemporaryFile(delete=False)
try:
    print(tmp.name)
    tmp.write(...)
finally:
    tmp.close()
    os.unlink(tmp.name)

【讨论】:

这是一个很好的答案,基于谷歌注意到的问题主题,而不是 SuperString 的特定问题 如果您想控制将其分配到哪个目录,可以将可选的dir=path arg 传递给NamedTemporaryFile 你需要做os.unlink(tmp.name)吗?使用 tempfile 进行清理不是重点吗? 临时文件是否有可能同时创建两个同名文件?如果是,第一个文件会被覆盖吗? (考虑我有多个用户可以同时调用该函数)【参考方案2】:

python 有一个tempfile module,但一个简单的文件创建也可以解决问题:

new_file = open("path/to/FILE_NAME.ext", "w")

现在您可以使用write 方法对其进行写入:

new_file.write('this is some content')

使用tempfile 模块可能如下所示:

import tempfile

new_file, filename = tempfile.mkstemp()

print(filename)

os.write(new_file, "this is some content")
os.close(new_file)

使用mkstemp,您有责任在完成文件后删除该文件。使用其他参数,您可以影响文件的目录和名称。


更新

正如Emmet Speer 正确指出的那样,使用mkstemp 时有security considerations,因为客户端代码负责关闭/清理创建的文件。处理它的更好方法是以下 sn-p(取自链接):

import os
import tempfile

fd, path = tempfile.mkstemp()
try:
    with os.fdopen(fd, 'w') as tmp:
        # do stuff with temp file
        tmp.write('stuff')
finally:
    os.remove(path)

os.fdopen 将文件描述符包装在 Python 文件对象中,当 with 退出时会自动关闭。对 os.remove 的调用会在不再需要时删除文件。

【讨论】:

这确实应该更新以提供在 python 中创建临时文件的安全方式。这里有一些例子。 security.openstack.org/guidelines/… 你不应该在finally 块中也fd.close() 吗?检查 os remove 的文档以删除仍在使用的文件 - docs.python.org/3/library/os.html#os.remove @NelsonRodrigues "with" 关键字在执行内部代码后自动关闭别名文件 @ganski 哦,我明白了,我以为它只是关闭了 tmp 对象。我测试了它,它也关闭了fd 如何选择我正在创建的文件类型?

以上是关于如何在 Python 中创建 tmp 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中创建一个zip文件

如何在 Python 中创建多个嵌套文件夹?

如何在 Python 中创建文本文件寻呼机? [关闭]

如何使用python在Mac云驱动器中创建文件[关闭]

你如何在python中创建一个具有其他用户可以写入权限的文件

如何在 Python 中创建递增的文件名?