如何在 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章